Android 7.1 的Shortcuts(快捷方式)
阿新 • • 發佈:2018-12-17
我這裡就不解釋什麼是Shortcuts了,有什麼不理解的看上面的地址,我這裡只說如何實現,總結一下內容。
一、靜態註冊
第一步:在res/xml
目錄下建立一個新的xml檔案, 這裡我們命名為shortcuts.xml
<?xml version ="1.0" encoding ="utf-8"?> https://developer.android.com/guide/actions/index.html --> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:shortcutId="home" android:enabled="true" android:icon="@mipmap/ic_launcher" android:shortcutShortLabel="@string/short_name" android:shortcutLongLabel="@string/long_name" android:shortcutDisabledMessage="@string/no_name"> <intent android:action="android.intent.action.VIEW" android:targetPackage="com.example.myshortcuts" android:targetClass="com.example.myshortcuts.HomeActivity" /> <categories android:name="android.shortcut.conversation"/> </shortcut> </shortcuts>
首先一個shortcuts
標籤, 然後是一個shortcut
, 到這裡我們大概可以猜測到這裡可以註冊多個shortcut
, shortcut
標籤有很多屬性, 我們來一個個的瞭解下.
1. shortcutId, 不用多說, 這肯定是一個唯一的id 2. enabled, 表示這個shortcut是否可用 3. icon,文字提示語句旁邊的圖示 4. shortcutShortLabel, 這裡是配置的短名稱, 下面還會有長名稱, 如果長名稱顯示不下, 就顯示短名稱 5. shortcutLongLabel, 這裡是配置的長名稱, launcher會優先選擇長名稱顯示 6. shortcutDisabledMessage, 這個配置是在我們選擇一個不可用的shortcut時給使用者的一個提示 7. intent, 這裡表示我們點選shortcut時要幹嘛 8. targetPackage是指定一個目標應用的包名 9. targetClass是我們要跳轉的目標類, 這裡要注意的是android:action一定要配置, 否則會崩潰 10. categories, 這個東西目前位置官方只給提供了android.shortcut.conversation
注意:shortcutShortLabel、shortcutLongLabel、shortcutDisabledMessage必須用string引入文字內容,不能直接輸入文字。
第二步:配置清單檔案。必須在有<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />的Activity中配置。
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <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> </application>
大功告成,靜態配置就到這裡。
二、動態配置
1.動態配置一個
@SuppressLint("NewApi")
private void initData() {
mShortcutManager = getSystemService(ShortcutManager.class);
List<ShortcutInfo> infos = new ArrayList<>();
Intent intent = new Intent(this, MessageActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("msg", "我和張亞濤的對話");
ShortcutInfo info = new ShortcutInfo.Builder(this, "id")
.setShortLabel("濤")
.setLongLabel("聯絡人:張亞濤")
.setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher_round))
.setIntent(intent)
.build();
infos.add(info);
mShortcutManager.setDynamicShortcuts(infos);
}
2. 動態配置多個(最多四個)
@SuppressLint("NewApi")
private void setupShortcuts() {
for (int i = 0; i < 4; i++) {
list.add("條目"+i);
}
mShortcutManager = getSystemService(ShortcutManager.class);
List<ShortcutInfo> infos = new ArrayList<>();
for (int i = 0; i < mShortcutManager.getMaxShortcutCountPerActivity(); i++) {//mShortcutManager.getMaxShortcutCountPerActivity()表示快捷方式的最大個數
Intent intent = new Intent(this, MessageActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("msg", "我和" + list.get(i) + "的對話");
ShortcutInfo info = new ShortcutInfo.Builder(this, "id" + i)
.setShortLabel(list.get(i))
.setLongLabel("聯絡人:" + list.get(i))
.setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher_round))
.setIntent(intent)
.build();
infos.add(info);
}
mShortcutManager.setDynamicShortcuts(infos);
}
3. 刪除和禁止Item
private void removeItem() {
List<ShortcutInfo> infos = mShortcutManager.getPinnedShortcuts();
for (ShortcutInfo info : infos) {
if (info.getId().equals("id")) {
mShortcutManager.disableShortcuts(Arrays.asList(info.getId()), "暫無該聯絡人");//刪除和禁止後,再次點選的提示文字內容
}
}
mShortcutManager.removeDynamicShortcuts(Arrays.asList("id"));
}
4. 修改了某個條目後,shortcut也應該相應的修改
private void initData() {
mShortcutManager = getSystemService(ShortcutManager.class);
List<ShortcutInfo> infos = new ArrayList<>();
Intent intent = new Intent(this, HomeActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("msg", "我和張亞濤的對話");
ShortcutInfo info = new ShortcutInfo.Builder(this, "id1")
.setShortLabel("濤")
.setLongLabel("聯絡人:張亞濤真帥!!!")
.setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher_round))
.setIntent(intent)
.build();
infos.add(info);
mShortcutManager.updateShortcuts(Arrays.asList(info));
}
OK,就這樣了。