靜態(tài)快捷方式
只需要通過(guò) AndroidManifest.xml
文件配置即可添加快捷方式
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:exported="true">
<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/fk_shortcuts" />
</activity>
<!-- 額外配置一個(gè)Activity -->
<activity android:name=".StaticActivity" />
xml/fk_shortcuts.xml
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:enabled="true"
android:icon="@drawable/fklogo"
android:shortcutDisabledMessage="@string/disable_message"
android:shortcutId="fk_shortcut"
android:shortcutLongLabel="@string/long_label"
android:shortcutShortLabel="@string/short_label">
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.example.myapplication.StaticActivity"
android:targetPackage="com.example.myapplication" />
<!-- categories目前只能指定android.shortcut.conversation -->
<categories android:name="android.shortcut.conversation" />
</shortcut>
<!-- 下面可根據(jù)需要列出多個(gè)shortcut元素 -->
</shortcuts>
enabled
設(shè)置該快捷項(xiàng)是否可用
icon
設(shè)置該快捷項(xiàng)的圖標(biāo)
shortcutDisabledMessage
設(shè)置禁用該快捷項(xiàng)時(shí)所顯示的文本
shortcutId
設(shè)置該快捷項(xiàng)的 ID
shortcutLongLabel
設(shè)置該快捷項(xiàng)的長(zhǎng)標(biāo)題
shortcutShortLabel
設(shè)置該快捷項(xiàng)的短標(biāo)題
StaticActivity
public class StaticActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_static);
}
}
動(dòng)態(tài)快捷方式
通過(guò) ShortcutManager
可為應(yīng)用動(dòng)態(tài)添加溺健、刪除、更新快捷方式漩仙。
public class MainActivity extends AppCompatActivity {
public static final String ID_PREFIX = "FK";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button addBn = findViewById(R.id.add);
Button deleteBn = findViewById(R.id.delete);
// 獲取快捷方式管理器:ShortcutManager
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
// 為按鈕的單擊事件添加監(jiān)聽(tīng)器
addBn.setOnClickListener(view -> {
// 獲取所有動(dòng)態(tài)添加的快捷方式
List<ShortcutInfo> infList = shortcutManager.getDynamicShortcuts();
// 如果還沒(méi)有添加動(dòng)態(tài)的快捷方式
if (infList == null || infList.isEmpty()) {
List<ShortcutInfo> addList = new ArrayList<>();
// 采用循環(huán)添加4個(gè)動(dòng)態(tài)快捷方式
for (int i = 1; i < 5; i++) {
// 為快捷方式創(chuàng)建Intent
Intent intent = new Intent(MainActivity.this, DynamicActivity.class);
// 必須設(shè)置action屬性
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("msg", "第" + i + "條消息");
ShortcutInfo shortcut = new ShortcutInfo.Builder(this, ID_PREFIX + i)
.setShortLabel("快捷方式" + i)
.setLongLabel("詳細(xì)描述" + i)
.setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher))
.setIntent(intent).build();
addList.add(shortcut);
}
// 添加多個(gè)快捷方式
shortcutManager.addDynamicShortcuts(addList);
Toast.makeText(this, "快捷方式添加成功",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "快捷方式已經(jīng)存在",
Toast.LENGTH_SHORT).show();
}
});
// 為按鈕的單擊事件添加監(jiān)聽(tīng)器
deleteBn.setOnClickListener(view -> {
// 獲取所有動(dòng)態(tài)添加的快捷方式
List<ShortcutInfo> infList = shortcutManager.getDynamicShortcuts();
// 如果還沒(méi)有添加動(dòng)態(tài)的快捷方式
if (infList == null || infList.isEmpty()) {
Toast.makeText(this, "還沒(méi)有添加快捷方式",
Toast.LENGTH_SHORT).show();
} else {
// 刪除所有的快捷方式
shortcutManager.removeAllDynamicShortcuts();
Toast.makeText(this, "刪除快捷方式成功",
Toast.LENGTH_SHORT).show();
}
});
}
}
DynamicActivity
public class DynamicActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dynamic);
TextView tv = findViewById(R.id.tv);
tv.setText(getIntent().getExtras().get("msg").toString());
}
}
桌面快捷方式
通過(guò) ShortcutManager
進(jìn)行動(dòng)態(tài)添加锤悄。
- 使用
ShortcutManager
的isRequestPinShortcutSupported()
方法判斷當(dāng)前 Android 版本是否支持 Pinned 快捷方式(Android 8 才支持)近她。 - 為 Pinned 快捷方式創(chuàng)建
ShortcutInfo
鼻忠,該對(duì)象同樣需要包含ID驰吓、圖標(biāo)混蔼、長(zhǎng)標(biāo)題履腋、短標(biāo)題、Intent等惭嚣。這一步可分為兩種情況遵湖。
- 如果要?jiǎng)?chuàng)建的
ShortcutInfo
在該應(yīng)用的快捷項(xiàng)列表中己經(jīng)存在(根據(jù) ID 判斷),系統(tǒng)將可直接使用已有ShortcutInfo
對(duì)象的ID晚吞、圖標(biāo)延旧、長(zhǎng)標(biāo)題、短標(biāo)題槽地、Intent 信息迁沫。 - 如果要?jiǎng)?chuàng)建的
ShortcutInfo
在該應(yīng)用的快捷項(xiàng)列表中不存在,則系統(tǒng)必須為ShortcutInfo
對(duì)象設(shè)置ID捌蚊、圖標(biāo)集畅、長(zhǎng)標(biāo)題、短標(biāo)題挺智、Intent 信息窗宦。
- 使用
ShortcutManager
的requestPinShortcut()
方法請(qǐng)求添加 Pined 快捷方式谣辞。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button addBn = findViewById(R.id.add);
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
addBn.setOnClickListener(view -> {
if (shortcutManager.isRequestPinShortcutSupported()) {
// 設(shè)置該快捷方式啟動(dòng)的Intent
Intent myIntent = new Intent(MainActivity.this, MainActivity.class);
myIntent.setAction("android.intent.action.VIEW");
// 如果ID為fk-shortcut的快捷方式已經(jīng)存在沐扳,則可省略設(shè)置Intent、Icon等屬性
ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(
MainActivity.this, "my-shortcut")
.setShortLabel("Pinned快捷")
.setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher))
.setIntent(myIntent).build(); // ①
// 請(qǐng)求添加Pinned快捷方式
shortcutManager.requestPinShortcut(pinShortcutInfo, null); // ②
}
});
}
}
摘抄至《瘋狂Android講義(第4版)》