【问题标题】:Android "Not granting permission" errorAndroid“未授予权限”错误
【发布时间】:2011-05-31 19:31:15
【问题描述】:

我最近一直在探索设备管理 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>

是我在获得许可时犯了错误,还是如果没有额外的代码签名就无法进行设备管理?

【问题讨论】:

  • 很确定这在没有固件签名的情况下是不可用的。

标签: android android-manifest device-admin


【解决方案1】:

根据http://developer.android.com/guide/publishing/app-signing.html 调试器仅出于编译+运行目的对其进行签名。是不是还能在调试器中运行?

【讨论】:

    【解决方案2】:

    您的 XML 格式错误,因为您在指定元数据元素之前关闭了 &lt;receiver /&gt; 标记。应该是这样的:

    <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:label 上为接收器设置@string 吗?例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多