即使我已经在清单中定义了权限,在运行时检查权限也会失败

时间:2013-02-01 06:01:03

标签: java android permissions android-ndk

我在RecSched应​​用程序/项目的清单中定义了以下权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.recschedapk"
    android:versionCode="1"
    android:versionName="1.0" >
    <permission android:name="com.example.recschedapk.permission.DEADLY_ACT"
        android:label="DeadlyActivity"
        android:description="@string/permdesc"
        android:permissionGroup="android.permission-group.COST_MONEY"
        android:protectionLevel="dangerous" />
        :
        :
</manifest>

我已在WebApp的其他应用程序(项目)中指定了此权限:

<uses-permissiom android:name="com.example.recschedapk.permission.DEADLY_ACT" />

在WebApp.java文件中,我定义了以下函数来检查运行时的权限:

private boolean checkPermission()
    {

        String permission = "com.example.recschedapk.permission.DEADLY_ACT";
        int res = getBaseContext().checkCallingOrSelfPermission(permission);
        Log.d("PERMCHECK", "int val : "+ res);
        return (res == PackageManager.PERMISSION_GRANTED);            
    }

对上述功能的要求:

               if((this.checkPermission())
        return new VideoBroadCastObject(this);

无论怎样,电话似乎都失败了。这里是android新手。谁能告诉我这里的问题是什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

  

如果您当前没有处理IPC,此功能将始终失败。

另一个应用程序不拥有/声明此权限,这使得执行checkPermission()的代码必须属于已被授予此权限的进程/ pid的唯一条件。这意味着必须从IPC调用执行checkPermission()。也就是说,您从其他进程收到的IBinder会调用此方法。

答案 1 :(得分:0)

我不知道您的流程是什么,但您可以试试这个......

private boolean checkPermission() {
    String permission = "com.example.recschedapk.permission.DEADLY_ACT";
    int res = getBaseContext().checkPermission(permission, Binder.getCallingPid(), Binder.getCallingUid());
    Log.d("PERMCHECK", "int val : "+ res);
    return (res == PackageManager.PERMISSION_GRANTED);            
}