I wrote a custom permission for receiving broadcasts for my widget, I get a permission denial for Motorola devices.
Creating permission
<permission
android:name="com.sample.app.WIDGET_PERMISSION"
android:description="@string/widgetDesc"
android:label="@string/widgetLabel"
android:protectionLevel="signature" >
</permission>
Adding permission to Manifest file
<uses-permission android:name="com.sample.app.WIDGET_PERMISSION" />
Adding receiver
<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>
I get permission denial message only for Motorola devices,
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
Try removing
android:permission="com.sample.app.WIDGET_PERMISSION"from your receiver tag and only include<uses-permission android:name="com.sample.app.WIDGET_PERMISSION" />under your manifest tag, outside any application and activity.EDIT: The problem is that the broadcaster should send the permission together with the broadcast so that it passes through your BroadcastReceiver. When you are testing it using the command line, somehow, the permission is not being sent.
I think what you are doing about declaring the permission inside your receiver is correct but the issue is because of your permission protection level being signature. This level is described in the Android developers page like this:
This leads me to think that, in Motorola devices, this is not satisfied somehow. Try changing
to
If it still doesn’t work, I would say there is a bug with Motorola configurations.