在Android 7.1(API 25)之后添加的新功能捎稚,應(yīng)用快捷方式乐横。ShortcutManager管理一個(gè)應(yīng)用程序的快捷方式求橄。只要在長(zhǎng)按應(yīng)用圖標(biāo)的情況下今野,在應(yīng)用圖標(biāo)上顯示的快捷方式葡公,用戶可以快速訪問(wèn)任意一個(gè)Activity。
現(xiàn)在市場(chǎng)上已經(jīng)是有很多應(yīng)用增加了這項(xiàng)功能条霜,例如微博催什、美團(tuán)、支付寶宰睡、知乎蒲凶、印象筆記等。
按照慣例拆内,我們先看看效果圖:
一旋圆、快捷方式的特點(diǎn)
(1)靜態(tài)方式
(2)動(dòng)態(tài)方式
二、這個(gè)Dome主要是通過(guò)動(dòng)態(tài)的方式麸恍,下面我們來(lái)看看動(dòng)態(tài)創(chuàng)建的方式灵巧,是通過(guò)ShortcutManager實(shí)現(xiàn)快捷方式的增加、刪除抹沪、更新的操作刻肄,使用起來(lái)很簡(jiǎn)單。
package per.juan.shortcutdome;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
setupShortcuts();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 桌面快捷啟動(dòng)1融欧、發(fā)微博敏弃;2、熱門微博噪馏;3麦到、掃一掃
*/
private void setupShortcuts() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class);
List<ShortcutInfo> infos = new ArrayList<>();
Intent intent;
ShortcutInfo info;
Intent mainIntent = new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
// 發(fā)微博
intent = new Intent(this, PublishWeiboActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("isPublishWeibo", true);
intent.putExtra("from_shortcuts", true);
info = new ShortcutInfo.Builder(this, getResources().getString(R.string.shortcuts_publish_weibo_long_disable_msg)).setShortLabel(getResources().getString(R.string.shortcuts_publish_weibo_short_name)).setLongLabel(getResources().getString(R.string.shortcuts_publish_weibo_long_name)).setIcon(Icon.createWithResource(this, R.drawable.ico_shortcut_publish)).setIntents(new Intent[]{mainIntent, intent})//當(dāng)按下back時(shí),將轉(zhuǎn)到MainActivity
.setRank(0).build();
infos.add(info);
// 熱門微博
intent = new Intent(this, PopularWeiboActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("isPublishWeibo", false);
intent.putExtra("from_shortcuts", true);
info = new ShortcutInfo.Builder(this, getResources().getString(R.string.shortcuts_popular_weibo_disable_msg)).setShortLabel(getResources().getString(R.string.shortcuts_popular_weibo_short_name)).setLongLabel(getResources().getString(R.string.shortcuts_popular_weibo_long_name)).setIcon(Icon.createWithResource(this, R.drawable.ico_shortcut_popular)).setIntents(new Intent[]{mainIntent, intent})//當(dāng)按下back時(shí)欠肾,將轉(zhuǎn)到MainActivity
.setRank(1).build();
infos.add(info);
// 掃一掃
intent = new Intent(this, QRCodeActivity.class);
intent.setAction(Intent.ACTION_VIEW);
info = new ShortcutInfo.Builder(this, getResources().getString(R.string.shortcuts_qrcord_disable_msg)).setShortLabel(getResources().getString(R.string.shortcuts_qrcord_short_name)).setLongLabel(getResources().getString(R.string.shortcuts_qrcord_long_name)).setIcon(Icon.createWithResource(this, R.drawable.ico_shortcut_scan)).setIntent(intent).setIntents(new Intent[]{mainIntent, intent})//當(dāng)按下back時(shí)瓶颠,將轉(zhuǎn)到MainActivity
.setRank(2).build();
infos.add(info);
//這樣就可以通過(guò)長(zhǎng)按圖標(biāo)顯示出快捷方式了
mShortcutManager.setDynamicShortcuts(infos);
}
}
}
strings.xml
<resources>
<string name="app_name">ShortcutDome</string>
<string name="shortcuts_publish_weibo_short_name">發(fā)微博</string>
<string name="shortcuts_publish_weibo_long_name">發(fā)微博</string>
<string name="shortcuts_publish_weibo_long_disable_msg">發(fā)微博不可用</string>
<string name="shortcuts_popular_weibo_short_name">熱門微博</string>
<string name="shortcuts_popular_weibo_long_name">熱門微博</string>
<string name="shortcuts_popular_weibo_disable_msg">熱門微博不可用</string>
<string name="shortcuts_qrcord_short_name">掃一掃</string>
<string name="shortcuts_qrcord_long_name">掃一掃</string>
<string name="shortcuts_qrcord_disable_msg">掃一掃不可用</string>
</resources>
在進(jìn)來(lái)的頁(yè)面中,我們通過(guò)傳值去做一些業(yè)務(wù)邏輯判斷
boolean from_shortcuts = getIntent().getBooleanExtra("from_shortcuts", false);
if (from_shortcuts) {
boolean isPublishWeibo = getIntent().getBooleanExtra("isPublishWeibo", false);
}
好了董济,本篇文章就這樣啦步清,存在總結(jié)不到位的地方還望指導(dǎo),感謝~
最后附上官網(wǎng)地址:
https://developer.android.google.cn/reference/android/content/pm/ShortcutManager.html