2012-07-17 97 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