2012-07-17 93 views
1

我写了一个自定义的权限来接收我的widget的广播,我得到了摩托罗拉设备的权限拒绝。在摩托罗拉设备上自定义权限失败

创建权限

<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

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

编辑:问题是,广播公司应该与广播一起发送许可,以便它通过您的BroadcastReceiver。当您使用命令行测试它时,不知何故,权限未被发送。

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

一个权限,只有当请求应用程序 与相同的证书作为申报 许可申请签署的系统授权。如果证书匹配,系统会自动授予权限而不通知用户或要求用户明确批准 。

这让我想到,在摩托罗拉的设备中,这并不令人满意。尝试改变

android:protectionLevel="signature" 

android:protectionLevel="normal". 

如果还是不行,我会说有一个与摩托罗拉的配置错误。

+0

然后它的工作。但是,获得此许可不得从未获得此许可的发件人处收到。我的代码适用于Samsung,Htc设备,概率仅限于Moto DroidX和Moto Bionic – dcanh121 2012-07-18 16:38:26

+0

来自官方Android Developers页面:如果未设置此属性(android:permission),则由元素的权限属性设置的权限适用于广播接收机。如果两个属性均未设置,则接收方不受权限保护。 – Erol 2012-07-18 16:54:48

+0

如果应用程序需要访问受权限保护的功能,则必须声明它需要清单中具有元素的权限。然后,当应用程序安装在设备上时,安装程​​序会通过检查签署应用程序证书的权限并在某些情况下询问用户来确定是否授予请求的权限。如果授予权限,则应用程序可以使用受保护的功能。如果没有,那么访问这些功能的尝试只会在没有任何通知给用户的情况下失败。 – Erol 2012-07-18 16:55:04

相关问题