Android清单权限与运行时权限不匹配

时间:2014-07-11 00:13:35

标签: android testing permissions instrumentation

有点奇怪的问题。

我正在尝试编写一些代码,为了测试目的,它允许我的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(aka info.permissions)数组为null。因此,在运行时期间未检测到任何权限。任何线索可能是什么问题,如果这与我允许我的仪器添加通话记录的任务相关?

非常感谢。

1 个答案:

答案 0 :(得分:0)

此代码不会返回<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
    }