如何以错误的顺序安装时管理外部权限?

时间:2018-01-25 15:56:18

标签: android permissions

我有两个应用程序, MyService MyLauncher

  • MyService 拥有一个本地数据库,以及一个允许其他应用将数据保存到其中的提供商,具有权限toto.myservice.WRITE_DATABASE
  • MyLauncher 可以推送 MyService
  • 数据库中的数据

当我首先安装 MyService 时,Android会知道新的权限,因此当我想安装 MyLauncher 时,没有问题,成功提供了权限,并且数据很容易插入。

但如果首先安装 MyLauncher ,这不起作用,系统的权限为Unknown。 我尝试在Android 6+的OnCreate类似权限中管理它,但它似乎无法正常工作(ActivityCompat.requestPermissions没有显示任何窗口)

MyService (在清单中)我以这种方式声明了权限:

<permission android:name="toto.myservice.WRITE_DATABASE"android:label="M_WRITE_DB" android:protectionLevel="normal" />
<provider android:name="MyContentProvider"
    android:authorities="toto.myservice.MyContentProvider"
    android:exported="true"
    android:grantUriPermissions="true"
    android:writePermission="toto.myservice.WRITE_DATABASE"/>

MyLauncher (在清单中),我以这种方式使用权限:

<uses-permission android:name="toto.myservice.WRITE_DATABASE"/>

MyLauncher OnCreate中,我尝试拨打电话

ActivityCompat.requestPermissions(this,
                    new String[]{"toto.myservice.WRITE_DATABASE"},
                    SERVICE_PRINTER_WRITE_DATABASE);

没有显示任何窗口,并且在回调中:

@Override
public void onRequestPermissionsResult(int requestCode,
    String permissions[], int[] grantResults) {
    switch (requestCode) {
        case SERVICE_PRINTER_WRITE_DATABASE: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {
                Log.e(TAG, "grantResults.length = " + grantResults.length);
                //====> I'm here, not granted
            }
            return;
        }

    }
}

所以我的最后一个问题是,如果用户以错误的顺序进行安装,是否可以在不重新安装 MyLauncher 的情况下调用权限?

由于

0 个答案:

没有答案