如果你的安卓版本是25或者更高,你可以在你的app中通过定义快捷键方式来明确用户操作,形如:
此图来自android developers
我们可以看到,当长按app图标,会生成一个快捷操作列表,为用户提供快捷进入服务。
下面介绍一下ShortCuts如何创建。(静态创建以及动态创建)
1: 在清单文件中(AndroidManifest.xml),找到启动的Acitivity,即intent filters设置的是android.intent.action.MAIN和android.intent.category.LAUNCHER
2: 在启动的Activity中添加元素,如下:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
activity>
3.创建新的资源文件:res/xml/shortcuts.xml.如下:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="id2"
android:enabled="true"
android:icon="@mipmap/ic_launcher"
android:shortcutShortLabel="@string/main_name"
android:shortcutLongLabel="@string/main_name"
android:shortcutDisabledMessage="@string/main_name">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.shortcutsandroid"
android:targetClass="com.example.shortcutsandroid.MainActivity" />
<categories android:name="android.shortcut.conversation" />
shortcut>
<shortcut
android:shortcutId="id3"
android:enabled="true"
android:icon="@mipmap/ic_launcher"
android:shortcutShortLabel="@string/second_name"
android:shortcutLongLabel="@string/second_name"
android:shortcutDisabledMessage="@string/second_name">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.shortcutsandroid"
android:targetClass="com.example.shortcutsandroid.SecondActivity" />
<categories android:name="android.shortcut.conversation" />
shortcut>
shortcuts>
下面讲解一下shortcuts 里面各元素代表的含义
android:shortcutId:快捷方式ID,记住动态或者静态的ID都要不一样,否则对于重复ID只会显示一个
android:enabled:是否可点击,true会显示快捷方式,false则不显示快捷方式
android:icon:快捷方式图标
android:shortcutShortLabel:快捷方式短标签,限制在10个字符内
android:shortcutLongLabel:快捷方式长标签,限制在25个字符内
我们来看一下效果:
Shortcuts既可以提供快捷操作,也可以将快捷图标带入到桌面上
1:在启动页面创建ShortcutManager对象,管理快捷方式列表
2:创建快捷方式对象ShortcutInfo
3:通过setDynamicShortcuts()或者addDynamicShortcuts(List)方法添加ShortcutInfo
代码如下:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N_MR1) {
ShortcutManager shortcutManager=getSystemService(ShortcutManager.class);
ShortcutInfo shortcutInfo=new ShortcutInfo.Builder(this,"id1")
.setShortLabel("Web site")
.setLongLabel("Open this web site")
.setIcon(Icon.createWithResource(this,R.mipmap.ic_launcher))
.setIntents(new Intent[]{new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK),new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.mysite.example.com/"))})
.build();
shortcutManager.addDynamicShortcuts(Arrays.asList(shortcutInfo));
}
代码理解如上,不做详细介绍。
介绍一下动态的几个方法。
Publish(发布):setDynamicShortcuts()或者addDynamicShortcuts()
Update(更新):updateShortcuts()
Remove(移除):removeDynamicShortcuts()或removeAllDynamicShortcuts()
如果我通过Shortcuts进入一个页面,返回到主页面怎么操作呢?????
不要着急,看代码。
主要通过多Intent来解决这个问题。
动态通过setIntents,静态通过在一个shortcut下创建多个intent来实现。
例如:
shortcutInfo .setIntents(new Intent[]{new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK),new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.mysite.example.com/"))})
这样会打开网页界面,点击返回键返回到主页面。
另外还有一个限制,就是静态+动态创建的shortcuts不能超过5个,即小于等于4个,否则会报错。
代码地址传送门:
https://github.com/wangchang163/ShortCutsAndroid