Android 快捷方式

image.png

靜態(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);
    }
}
image.png

動(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());
    }
}
image.png

桌面快捷方式

通過(guò) ShortcutManager 進(jìn)行動(dòng)態(tài)添加锤悄。

  1. 使用 ShortcutManagerisRequestPinShortcutSupported() 方法判斷當(dāng)前 Android 版本是否支持 Pinned 快捷方式(Android 8 才支持)近她。
  2. 為 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 信息窗宦。
  1. 使用 ShortcutManagerrequestPinShortcut() 方法請(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);  // ②
            }
        });
    }
}
image.png

摘抄至《瘋狂Android講義(第4版)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市杨拐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帆阳,老刑警劉巖屋吨,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鳍徽,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)阶祭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門直秆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瑰剃,你說(shuō)我怎么就攤上這事疫稿。” “怎么了遗座?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)猛遍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)懊烤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任茸习,我火速辦了婚禮,結(jié)果婚禮上号胚,老公的妹妹穿的比我還像新娘浸遗。我一直安慰自己,他們只是感情好跛锌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布髓帽。 她就那樣靜靜地躺著,像睡著了一般氢卡。 火紅的嫁衣襯著肌膚如雪晨缴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天筑悴,我揣著相機(jī)與錄音,去河邊找鬼稍途。 笑死械拍,一個(gè)胖子當(dāng)著我的面吹牛突勇,可吹牛的內(nèi)容都是我干的坷虑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼定躏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了痊远?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤冒版,失蹤者是張志新(化名)和其女友劉穎逞姿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哼凯,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年猎贴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝴光。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趁耗,死狀恐怖疆虚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情径簿,我是刑警寧澤罢屈,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布篇亭,位于F島的核電站,受9級(jí)特大地震影響曼月,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柔昼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岳锁。 院中可真熱鬧,春花似錦咳燕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艾船。三九已至玩般,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間礼饱,已是汗流浹背坏为。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工匀伏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蝴韭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓履磨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蹬耘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容