1

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

创建权限

<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
4

1 回答 1

1

尝试android:permission="com.sample.app.WIDGET_PERMISSION"从您的接收者标签中删除,并且只包含<uses-permission android:name="com.sample.app.WIDGET_PERMISSION" />在您的清单标签下,在任何应用程序和活动之外。

编辑:问题是广播者应该将许可与广播一起发送,以便它通过您的广播接收器。当您使用命令行对其进行测试时,不知何故,没有发送权限。

我认为您在接收器内部声明权限的做法是正确的,但问题在于您的权限保护级别是签名。这个级别在 Android 开发者页面中是这样描述的:

仅当请求应用程序使用与声明权限的应用程序相同的证书签名时,系统才会授予该权限。如果证书匹配,系统会自动授予权限,无需通知用户或请求用户明确批准。

这使我认为,在摩托罗拉设备中,这并不满足。尝试改变

android:protectionLevel="signature"

android:protectionLevel="normal".

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

于 2012-07-17T21:44:56.850 回答