Android“未授予权限”错误

时间:2010-12-28 22:52:25

标签: android android-manifest device-admin

我最近一直在探索设备管理API,我发现我的代码和Android开发网站上的示例代码都无法启用设备管理。

启动时出现的错误是:

12-28 17:24:49.596: WARN/PackageManager(60): Not granting permission android.permission.BIND_DEVICE_ADMIN to package com.example (protectionLevel=2 flags=0x8446)

然后当我尝试启用管理员时:

12-28 17:27:22.426: WARN/DeviceAdminAdd(396): Unable to retrieve device policy ComponentInfo{com.example/com.example.Receiver}
org.xmlpull.v1.XmlPullParserException: No android.app.device_admin meta-data

我根据清单的要求设置所有权限完全相同:

    <activity android:name=".MyActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".Receiver"
              android:label="device_admin"
              android:permission="android.permission.BIND_DEVICE_ADMIN"/>
              <meta-data android:name="android.app.device_admin"
                         android:resource="@xml/device_admin"  />
              <intent-filter>
                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
              </intent-filter>

并且设备策略也完全按照API规定的要求进行设置。

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
    </uses-policies>

如果没有额外的代码签名,我是否在获取权限时出错或设备管理不可用?     

2 个答案:

答案 0 :(得分:1)

由于您在指定元数据元素之前关闭了<receiver />标记,因此格式错误的XML。这是它应该是什么:

<receiver android:name=".Receiver"
          android:label="device_admin"
          android:permission="android.permission.BIND_DEVICE_ADMIN">
      <meta-data android:name="android.app.device_admin"
                 android:resource="@xml/device_admin"  />
      <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
      </intent-filter>
</receiver>

想到的其他想法:

  • 在我的项目中,device_admin.xml文件位于\ res \ xml目录中。也许确保你的XML文件存在?

  • 你在接收器的android:标签上需要@string吗?例如

android:label="@string/device_admin"
  • 我不确定这一点,但您是否还需要在Manifest.xml中添加uses-permission XML元素?

答案 1 :(得分:0)

根据http://developer.android.com/guide/publishing/app-signing.html 调试器只是为编译+运行目的而签名。它还不能在调试器中运行吗?