android某个功能和应用快捷方式
2023-12-13 03:30:08
android某个功能和应用快捷方式
最近接受到一个任务,给应用内的一个功能点创建一个快捷方式,方便用户操作快捷、
一,第一种方式,只适用Build.VERSION.SDK_INT>25 以上的版本
/** shortcutId 快捷方式的标示,自己定义
* 固定快捷方式
* Build.VERSION.SDK_INT>25以上
*/
private fun createQuestPinShortcut(context: Context) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
if (mShortcutManager == null) {
mShortcutManager = context.getSystemService(ShortcutManager::class.java)
}
var isExit = false
mShortcutManager?.pinnedShortcuts?.forEach {
if (shortcutId == it.id) {
//判断快捷方式是否已存在
isExit = true
Toast.showToast(context, "快捷方式已存在")
return@forEach
}
}
if (mShortcutManager?.isRequestPinShortcutSupported == true && !isExit) {
val intent = Intent(context, ShortcutAlarmCallActivity::class.java)
intent.action = shortcutAction
intent.action = Intent.ACTION_VIEW
val pinShortcutInfo = ShortcutInfo.Builder(context, shortcutId)
.setShortLabel(context.getString(R.string.shortcut_alarm_long))
.setLongLabel(context.getString(R.string.shortcut_alarm_long))
.setIcon(Icon.createWithResource(context, R.mipmap.icon_alarm_emergency))
.setIntent(intent)
.build()
// 注册固定快捷方式成功广播
val intentFilter = IntentFilter()
intentFilter.addAction(shortcutBroadcast)
val receiver = ShoutCutReceiver()
context.registerReceiver(receiver, intentFilter)
val flag = PendingIntent.FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
val pinnedShortcutCallbackIntent = Intent(shortcutBroadcast)
val successCallback = PendingIntent.getBroadcast(
context,
0,
pinnedShortcutCallbackIntent,
flag
)
mShortcutManager?.requestPinShortcut(pinShortcutInfo, successCallback.intentSender)
}
}
}
二、第二种方式 适配android 8以下的版本和以上的版本
/**
* 兼容创建快捷方式
* @param context Context
*/
open fun addShortCutCompact(context: Context) {
if (isShortCutExist(context, context.getString(R.string.shortcut_alarm_long))) {
Toast.showToast(context, "快捷方式已存在")
return
}
if (!ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
Toast.showToast(context, "无法创建快捷方式")
return
}
val shortcutInfoIntent = Intent()
shortcutInfoIntent.setClassName(context, className)
shortcutInfoIntent.action = Intent.ACTION_VIEW //action必须设置,不然报错
val info = ShortcutInfoCompat.Builder(context, shortcutId)
.setIcon(IconCompat.createWithResource(context, R.mipmap.icon_alarm_emergency))
.setShortLabel(context.getString(R.string.shortcut_alarm_long))
.setIntent(shortcutInfoIntent)
.build()
// 注册固定快捷方式成功广播
val intentFilter = IntentFilter()
intentFilter.addAction(shortcutBroadcast)
val receiver = ShoutCutReceiver()
context.registerReceiver(receiver, intentFilter)
val pinnedShortcutCallbackIntent = Intent(shortcutBroadcast)
val flag = PendingIntent.FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
//当添加快捷方式的确认弹框弹出来时,将被回调
val shortcutCallbackIntent = PendingIntent.getBroadcast(
context,
0,
pinnedShortcutCallbackIntent,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) flag else 0
)
ShortcutManagerCompat.requestPinShortcut(
context,
info,null)
}
三、用第二种方式可以用以下方法判断是否存在快捷方式
/**
* 判断是否存在快捷方式
* @param context Context
* @return Boolean
*/
private fun isShortCutExist(context: Context, title: String): Boolean {
var isInstallShortcut = false
if (TextUtils.isEmpty(title)) {
return false
}
val contentResolver: ContentResolver = context.contentResolver
try {
val authority = "com.android.launcher3.settings"
val url = "content://$authority/favorites?notify=true"
val contentUrl: Uri = Uri.parse(url)
val strArray = arrayOf("title", "iconResource")
val cursor: Cursor? = contentResolver.query(
contentUrl, strArray, "title=?",
arrayOf(title.trim()), null
)
cursor?.let {
if (it.count > 0) {
isInstallShortcut = true
}
if (!it.isClosed) {
it.close()
}
}
} catch (e: Exception) {
e.toString()
}
return isInstallShortcut
}
**
**## 最近要记得添加权限**
**
```kotlin
<!-- 添加快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!-- 移除快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<!-- 查询快捷方式4.4以上 -->
<uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS" />
<uses-permission android:name="com.android.launcher3.permission.WRITE_SETTINGS" />
如果要添加创建成功提示`
`class ShoutCutReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.i("ShoutCutReceiver", "onReceive: 创建成功")
Toast.showToast(context, R.drawable.icon_succes_tip,"创建成功")
}
}
文章来源:https://blog.csdn.net/zhanghuaiwang/article/details/134880336
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!