我最近一直在探索设备管理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>
如果没有额外的代码签名,我是否在获取权限时出错或设备管理不可用?
答案 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 调试器只是为编译+运行目的而签名。它还不能在调试器中运行吗?