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

时间:2016-11-01 08:46:41

标签: android android-widget android-6.0-marshmallow smartphone

我一直在研究适用于Android 6的应用程序小部件,它的工作原理是每次广播接收器收到onUpdate时,它都会在使用适当的内容更新RemoteView之前检查权限,例如消息说“权限缺失“或其应有的任何内容。

但是,我注意到如果我通过系统&gt禁用我的应用程序所需的任何权限;应用>权限该进程在Studio中被标记为“死”。

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

现在我的问题是,有没有办法捕获权限的变化?奇怪的是,由于权限更改,小部件仍然在主屏幕上“活着”,因为根据工作室(由于没有错误,它似乎......),它应该“死了”。由于权限更改= /

2 个答案:

答案 0 :(得分:0)

我不确定这究竟是你要找的,但是我用这段代码来检查权限。如果权限被拒绝,则下次您使用该应用程序(在我的情况下为可穿戴应用程序)时,它会再次要求获得许可。

我在一个额外的类中使用了这个函数,所以也许你应该修改它以适应。

int permissionCheck = ContextCompat.checkSelfPermission(mainActivity,
                Manifest.permission.RECORD_AUDIO);

        if (permissionCheck != 0) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                mainActivity.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO,
                        Manifest.permission.INTERNET}, REQUEST_RECORD_AUDIO_PERMISSION);
            }
        }

同样你必须声明一个最终变量

private final int REQUEST_RECORD_AUDIO_PERMISSION=1;

你必须用Manifest.permission替换Manifest.permission.RECORD_AUDIO这一行。(你的许可)

如果您想经常检查权限 - 在需要许可之前,请制作一个方法并在代码中使用它。

希望我能帮到你

Birki

答案 1 :(得分:0)

是的,我想我已经找到了问题......

当用户进入手机设置时>应用> app>权限,然后撤销权限,它最终会杀死应用程序的进程 - 或者它可能实际上在某处暂停,因为只要您再次授予权限,相同的进程(相同的PID)就会再次存在。

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

那么,解决方法?

获取AppWidgetManager的新实例,并在调用super.onReceive()之前手动将这些窗口小部件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没有权限撤销监听器说实话= /