浅谈Android添加快捷⽅式ShortCut
众所周知application有4种启动⽅式:
点击app启动
快捷⽅式
通知跳转
输⼊命令(adb命令等)
今天给⼤家简单介绍⼀下快捷⽅式启动的⽤法~
快捷⽅式介绍
⾕歌官⽅在Android 7.1(API 25)新增了桌⾯长按弹出菜单,并且在8.0(API 26)以后可以固定快捷⽅式⾄桌⾯上。围绕桌⾯快捷⽅式的需求也⽐较多,例如将联系⼈、⼩程序都可以添加⾄桌⾯;简书将“写⽂章”添加⾄桌⾯;⾼德将“坐标信息”添加到桌⾯。
快捷⽅式情景再现
将某个应⽤添加到桌⾯
长按应⽤打开某⼀个功能
快捷⽅式使⽤
将某个应⽤添加到桌⾯
先看代码,后⾯我会将这些代码写成⼯具类供⼤家使⽤:
/**
* @param context      当前content
* @param targetClass  快捷图标打开的界⾯
* @param backClass    打开后按返回键返回的界⾯
* @param shortCutId    shortCut 唯⼀id
* @param shortCutIcon  桌⾯上显⽰的图标
*/
public void AddShortCut(Context context, Class targetClass, Class backClass, int shortCutId, int shortCutIcon) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
ShortcutManager shortcutManager = (ShortcutManager) SystemService(Context.SHORTCUT_SERVICE);
if (shortcutManager != null && shortcutManager.isRequestPinShortcutSupported()) {
Intent shortcutInfoIntent = new Intent(context, targetClass);
shortcutInfoIntent.setAction(Intent.ACTION_VIEW);
ShortcutInfo info = new ShortcutInfo.Builder(context, "id" + shortCutId)
.ateWithResource(context, shortCutIcon)).
setShortLabel(titles[shortCutId]).setIntent(shortcutInfoIntent).build();
PendingIntent shortcutCallbackIntent = Broadcast(context, 0, new Intent(context, backClass), PendingIntent.FLAG_UPDATE_CURRENT);
}
} else {
Toast.makeText(context, "设备不⽀持在桌⾯创建快捷图标!", Toast.LENGTH_LONG).show();
}
}
测试:
shortUtil.AddShortCut(
this,
MainActivity::class.java,
MainActivity::class.java,
2,
R.drawable.ic_launcher_background
)
效果图(1.1):
修改快捷⽅式:
/**
* @param context      上下⽂
* @param cls          要跳转的页⾯
* @param shortCutId    shortCut 唯⼀id
* @param shortCutIcon  桌⾯上显⽰的图标
* @param shortCutLabel 桌⾯图标下⽅显⽰的⽂字
*/
public void updItem(Context context, Class<?> cls, int shortCutId, int shortCutIcon, String shortCutLabel) {
Intent intent = new Intent(context, cls);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("msg", titles[shortCutId]);
ShortcutInfo info = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
info = new ShortcutInfo.Builder(context, "id" + shortCutId)
.ateWithResource(context, shortCutIcon))
.setShortLabel(shortCutLabel)
.setIntent(intent)
.build();
sm.updateShortcuts(Arrays.asList(info));
}
}
测试:
shortUtil.updItem(
this,
android radiogroup
ModifyActivity::class.java,
2,
R.drawable.ic_launcher_background,
"修改快捷⽅式成功"
)
效果图(1.2):
禁⽤快捷⽅式:
/**
* 禁⽌使⽤快捷⽅式
*
* @param index 禁⽌使⽤下标
*/
public void remove(int index) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
List<String> list = new ArrayList<String>();
list.add("id" + index);
sm.disableShortcuts(list);
}
}
测试:
效果图(1.3):
长按应⽤打开某⼀个功能:
这⾥以Fragment举例:
先来看看最终的效果:
主要代码:
private static int[] icons = {R.drawable.ic_launcher_background, R.drawable.ic_launcher_foreground,  R.drawable.ic_launcher_background, R.drawable.ic_launcher_foreground,};    private static String[] titles = {"⾸页", "我的", "详情", "设置"};
/**
* 设置默认快捷⽅式
*
* @param context 上下⽂
* @param ast    跳转页⾯
*/
public void setShortCuts(Context context, Class ast) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
ArrayList<ShortcutInfo> list = new ArrayList<>();
for (int i = 0; i < titles.length; i++) {
Intent intent = new Intent(context, ast);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("msg", titles[i]);
intent.putExtra(SHORTCUT_TAB_INDEX, i);
intent.addCategory("android.intent.category.LAUNCHER");
ShortcutInfo build = new ShortcutInfo.Builder(context, "id" + i)
.setShortLabel(titles[i])
.setLongLabel(titles[i])
.
ateWithResource(context, icons[i]))
.setIntent(intent)
.build();
list.add(build);
}
sm.setDynamicShortcuts(list);
} else {
Toast.makeText(context, "该设备不⽀持快捷⽅式", Toast.LENGTH_SHORT).show();
}
}
在Application中注册⼀下:
记得在清单⽂件声明哦
// 保存按钮
val radiolist = listOf(radioButton1, radioButton2, radioButton3, radioButton4)
//快捷⽅式打开
initShort {
val arg0 = intent?.extras?.getInt(ShortCutUtil.SHORTCUT_TAB_INDEX)
if (arg0 != null) {
val let = arg0.let {
}
val bun = Bundle()
bun["title"] = (let as RadioButton).text as String
//传值
blankFragment.setArguments(bun)
radiolist[arg0].isChecked = true
}
}
private fun initShort(arg0: () -> Unit) {
arg0.invoke()
}
private operator fun Bundle.set(key: String, value: String) {
this.putString(key, value)
}
注意:这段代码使⽤kotlin写的,因为刚创建项⽬的时候只能创建kotlin,我就懒的改了
Fragment代码很简单,通过Arguments获取到值赋值到TextView上即可这⾥就不贴代码了
以上就是浅谈Android添加快捷⽅式ShortCut的详细内容,更多关于Android快捷⽅式的资料请关注其它相关⽂章!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。