有点奇怪的问题。

我正在尝试编写一些代码,出于测试目的,它允许我的Instrumentation测试实例以编程方式添加呼叫日志。这样做很简单,但是需要android.permission.WRITE_CALL_LOG权限。

我已经在清单中添加了

<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>


但是当我在运行时使用此代码时...

PackageManager instrumentationPM = instrumentationContext.getPackageManager();
PackageInfo info = instrumentationPM.getPackageInfo(PACKAGE_NAME,
    PackageManager.GET_PERMISSIONS);
PermissionInfo[] permission_info = info.permissions;


Permission_info(又名info.permissions)数组为null。因此,在运行时未检测到权限。有什么线索可能是这里的问题,如果这与我允许我的仪器添加呼叫日志的任务完全相关?

谢谢你

最佳答案

此代码将不返回<uses-permission>指定的清单文件。相反,它将返回<permission>,即系统级别permission

我尝试了这段代码:

    PackageManager instrumentationPM = getApplicationContext().getPackageManager();
    PackageInfo info;
    try {
        info = instrumentationPM.getPackageInfo("com.example.testingproj",
            PackageManager.GET_PERMISSIONS);
        PermissionInfo[] permission_info = info.permissions;
        if(permission_info!=null)
            System.out.println(permission_info.length);
    } catch (NameNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }catch(Exception e){
        e.printStackTrace();
    }


我将此许可保留在清单文件中:

<permission android:name="anypermission"></permission>


它使我在logcat中的长度= 1。

我不知道从清单中获取所有<uses-permission>。但是,如果您只想检查清单中是否有特定权限,则可以尝试以下操作:

    if (instrumentationPM.checkPermission(permission.ACCESS_WIFI_STATE, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
        System.out.println("wifi state permission");
    } else {
        // do something
    }

关于android - Android list 权限与运行时权限不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24688281/

10-11 19:13