申请添加小部件代码
通过查询文档,发现了有一个API可以请求添加APP Widget 到桌面上。
Android 8及以上系统⽀持代码添加桌⾯⼩部件。调⽤AppWidgetManager。requestPinAppWidget()
即可。
示例代码如下
kotlin
private fun requestPinAppWidget(context: Context): Boolean {
//Android8一下不支持
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return false
val appWidgetManager = AppWidgetManager.getInstance(context)
//小组件的provider
val provider = ComponentName(context, HelloWidgetProvider::class.java)
//添加成功的广播
val successBroadcast = PendingIntent.getBroadcast(
context,
0,
Intent()
.setComponent(provider)
.setAction(ACTION_PIN_APP_WIDGET_SUCCESS), //这里为了方便,将广播发到HelloWidgetProvider
PendingIntent.FLAG_UPDATE_CURRENT.toImmutableCompatFlag()
)
return try {
//请求添加小部件,如果不支持的话会返回false,支持的话返回true
appWidgetManager.requestPinAppWidget(
provider,//添加的小部件provider
null,
successBroadcast//添加成功后会执行的intent
)
} catch (e: IllegalStateException) {
// 没有存在前台的activity或者前台service会出现这个异常
false
}
}
private fun Int.toImmutableCompatFlag(): Int {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this or PendingIntent.FLAG_IMMUTABLE
} else {
this
}
API调用测试
谷歌原生
OPPO
华为
小米
需要申请添加桌面快捷方程式权限。
在MIUI 13以下的机型上,需要申请INSTALL_SHORTCUT(com.android.launcher.permission.INSTALL_SHORTCUT)
才可以添加。
添加时没有展示确认弹窗,直接添加成功。
VIVO
无法添加
参考stackoverflow,好像没有解决方案。
总结
国内Android设备厂商太多,需要做很多适配工作,这的确对于开发者来说是一项挑战。大家如果有什么好的办法可以一起讨论交流。