使用代码申请添加小部件(APP Widget),展示添加弹窗。

申请添加小部件代码

通过查询文档,发现了有一个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

华为

小米

需要申请添加桌面快捷方程式权限。

参考stackoverflow

在MIUI 13以下的机型上,需要申请INSTALL_SHORTCUT(com.android.launcher.permission.INSTALL_SHORTCUT) 才可以添加。

添加时没有展示确认弹窗,直接添加成功。

VIVO

无法添加

参考stackoverflow,好像没有解决方案。

总结

国内Android设备厂商太多,需要做很多适配工作,这的确对于开发者来说是一项挑战。大家如果有什么好的办法可以一起讨论交流。

相关推荐
每次的天空1 小时前
Kotlin 内联函数深度解析:从源码到实践优化
android·开发语言·kotlin
练习本1 小时前
Android MVC架构的现代化改造:构建清晰单向数据流
android·架构·mvc
早上好啊! 树哥1 小时前
android studio开发:设置屏幕朝向为竖屏,强制应用的包体始终以竖屏(纵向)展示
android·ide·android studio
YY_pdd2 小时前
使用go开发安卓程序
android·golang
Android 小码峰啊4 小时前
Android Compose 框架物理动画之捕捉动画深入剖析(29)
android·spring
bubiyoushang8884 小时前
深入探索Laravel框架中的Blade模板引擎
android·android studio·laravel
cyy2984 小时前
android 记录应用内存
android·linux·运维
CYRUS STUDIO5 小时前
adb 实用命令汇总
android·adb·命令模式·工具
这儿有一堆花5 小时前
安卓应用卡顿、性能低下的背后原因
android·安卓
byte轻骑兵5 小时前
【Bluedroid】蓝牙HID DEVICE断开连接流程源码分析
android·c++·蓝牙·hid·bluedroid