使用代码申请添加小部件(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设备厂商太多,需要做很多适配工作,这的确对于开发者来说是一项挑战。大家如果有什么好的办法可以一起讨论交流。

相关推荐
一笑的小酒馆5 小时前
AndroidKMP之网络请求
android
aqi008 小时前
鸿蒙版本的JSBridge兼容与安卓配套的H5啦
android·华为·harmonyos·鸿蒙·移动应用
事圆则缓9 小时前
MVVM 的理解与设计
android·android jetpack
码农阿豪10 小时前
我把 OpenClaw 装进旧安卓手机后,又折腾了 3 天:飞书、ADB、SSH 全部打通
android·智能手机·飞书
有什么事11 小时前
把安卓搬上云端:云手机系统改造与内核优化拆解
android·智能手机
方白羽11 小时前
性能分析:Android Studio Profiler
android·性能优化·app
没文化的阿浩12 小时前
【MySQL】用户管理
android·mysql·adb
FlightYe13 小时前
音视频修炼之基础理论(五):AAC格式与解析
android·linux·c++·音视频·aac
法欧特斯卡雷特13 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·开源·全栈
摇滚侠13 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 31
android·spring boot·笔记