我写了一个自定义权限,用于接收我的小部件的广播,我得到了对摩托罗拉设备的拒绝许可。
创建权限
<permission
android:name="com.sample.app.WIDGET_PERMISSION"
android:description="@string/widgetDesc"
android:label="@string/widgetLabel"
android:protectionLevel="signature" >
</permission>
添加清单文件的权限
<uses-permission android:name="com.sample.app.WIDGET_PERMISSION" />
添加接收器
<receiver android:name=".MyWidget" android:label="MyApp"
android:icon="@drawable/image"
android:permission="com.sample.app.WIDGET_PERMISSION">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<category android:name="com.sample.app" />
</intent-filter>
</receiver>
我只获得了摩托罗拉设备的权限拒绝消息,
07-17 11:48:18.781: W/ActivityManager(479): Permission Denial: broadcasting Intent { act=android.appwidget.action.APPWIDGET_ENABLED cmp=com.sample.app/.MyWidget} from android (pid=3116, uid=10006) requires com.sample.app.WIDGET_PERMISSION due to receiver com.sample.app/com.sample.app.MyWidget
07-17 11:48:18.781: W/ActivityManager(479): Permission Denial: broadcasting Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.sample.app/.MyWidget(has extras) } from android (pid=3116, uid=10006) requires com.sample.app.WIDGET_PERMISSION due to receiver com.sample.app/com.sample.app.MyWidget
07-17 11:48:18.828: W/ActivityManager(479): Permission Denial: broadcasting Intent { act=com.motorola.blur.home.ACTION_SET_WIDGET_SIZE cmp=com.sample.app/.MyWidget(has extras) } from com.motorola.blur.home (pid=3116, uid=10006) requires com.sample.app.WIDGET_PERMISSION due to receiver com.sample.app/com.sample.app.MyWidget
答案 0 :(得分:1)
尝试从接收者标记中删除android:permission="com.sample.app.WIDGET_PERMISSION"
,并且只在您的清单标记下包含<uses-permission android:name="com.sample.app.WIDGET_PERMISSION" />
,不在任何应用和活动范围内。
编辑:问题是广播公司应该将广告一起发送给广播,以便它通过您的BroadcastReceiver。当您使用命令行测试它时,不知何故,该权限未被发送。
我认为您在接收器中声明权限的做法是正确的,但问题在于您的权限保护级别是签名。此级别在Android开发人员页面中描述如下:
系统仅在请求的应用程序授予的权限 使用与声明的应用程序相同的证书进行签名 许可。如果证书匹配,则系统自动进行 在不通知用户或要求用户的情况下授予许可 用户的明确批准。
这让我觉得,在摩托罗拉设备中,这种方式并不满足。尝试更改
android:protectionLevel="signature"
到
android:protectionLevel="normal".
如果它仍然不起作用,我会说摩托罗拉配置存在错误。