gpt4 book ai didi

android - 是否有 Android 应用小部件权限更改的监听器?

转载 作者:行者123 更新时间:2023-12-01 04:52:03 25 4
gpt4 key购买 nike

我一直在为 Android 6 开发一个应用程序小部件,它的工作原理是每次广播接收器收到 onUpdate 时,它​​都会在使用适当的内容更新 RemoteView 之前检查权限,例如一条消息,“权限缺失”或者它应该有的任何东西。

但是,我注意到,如果我通过 System > App > Permissions 禁用我的应用所需的任何权限,则该进程在 Studio 中会被标记为“已死”。

如果然后我通过触发 onUpdate 来测试小部件是否仍然在模拟器中工作,那么它肯定不再工作了。一旦我重新打开权限,就会生成一个新的进程 ID,并且该小部件还处于 Activity 状态并再次工作。

现在我的问题是,有没有办法捕捉权限的变化?奇怪的是,由于权限更改,当根据 Studio 应该是“死”时,小部件在主屏幕上仍然“活着”(似乎没有抛出错误......)

最佳答案

好吧,我想我已经找到了问题所在...

当用户进入手机的设置>应用程序>应用程序>权限然后撤销权限时,它最终会杀死应用程序的进程 - 或者它实际上可能在某个地方被暂停,因为一旦你再次授予权限,相同的进程(相同的PID ) 又活了。

因此,小部件 ID 会丢失,因此在接收到广播时不会调用 onUpdate(),并且无法更新已添加到主屏幕的所有小部件。

那么,解决方法呢?

在调用 super.onReceive() 之前,获取 AppWidgetManager 的新实例并手动将这些小部件 ID 放回 Intent。然后您将能够再次访问所有小部件实例并相应地更新它们。

@Override
public void onReceive(Context c, Intent i) {

String action = i.getAction();
if ( action.equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE) ) {
ComponentName thiswidget = new ComponentName(c, BroadcastHandler.class);
AppWidgetManager am = AppWidgetManager.getInstance(c);
int[] ids = am.getAppWidgetIds(thiswidget);
i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);

// either handle the permission change at this point or in onUpdate()
}

super.onReceive(c,i);

}

老实说,我不知道为什么 Google 没有权限被撤销的监听器 =/

关于android - 是否有 Android 应用小部件权限更改的监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40356657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com