摩托罗拉设备上的自定义权限失败

时间:2012-07-17 19:34:32

标签: android broadcastreceiver user-permissions

我写了一个自定义权限,用于接收我的小部件的广播,我得到了对摩托罗拉设备的拒绝许可。

  

创建权限

<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

1 个答案:

答案 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".

如果它仍然不起作用,我会说摩托罗拉配置存在错误。