2


我真的不知道什麼是錯誤的,但我的小工具由系統更新「APPWIDGET_UPDATE」它拋出以下異常。我嘗試了幾件事情,導出接收器(真/假),我嘗試了仿真器和真正的手機,但它是一樣的。我添加了幾個intent-filters,但它沒有工作。Android權限拒絕:廣播意圖

11-06 20:10:10.279: W/ActivityManager(61): Permission denied: checkComponentPermission() reqUid=1000 
11-06 20:10:10.279: W/ActivityManager(61): Permission Denial: broadcasting Intent { act=android.appwidget.action.APPWIDGET_UPDATE (has extras) } from com.ency.easychange (pid=1196, uid=10034) requires null due to receiver com.android.settings/com.android.settings.widget.SettingsAppWidgetProvider 

我的AppWidgetProvider只宣佈,因爲我試圖消除的可能性,但例外的是拋出ExchangeRateWidgetProvider.onReceive()被調用之前。

public class ExchangeRateWidgetProvider extends AppWidgetProvider { 
    public static final String tag = "ExchangeRateWidgetProvider"; 

     @Override 
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
       int[] appWidgetIds) { 

     } 
} 

我的清單:

<uses-sdk 
    android:minSdkVersion="9" 
    android:targetSdkVersion="15" /> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<!-- TODO: Remove, only for traces --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<application 
    android:icon="@drawable/ic_launcher_main" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".EasyChange" 
     android:label="@string/title_activity_easy_change" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 


    <service android:name=".ExchangeRateWidgetService" 
      android:exported="true"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <action android:name="android.appwidget.action.APPWIDGET_ENABLED" /> 
     </intent-filter>   
    </service> 


    <receiver 
     android:name=".ExchangeRateWidgetProvider" 
     android:label="@string/exchange_rate_widget_name" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      <action android:name="android.intent.action.MAIN" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/exchange_rate_widget_providerinfo" /> 
    </receiver> 

    <activity 
     android:name=".WidgetConfigSmall" 
     android:label="@string/title_activity_widget_config_small" 
     android:theme="@android:style/Theme.Holo.Dialog" 
     android:excludeFromRecents="true" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> 
     </intent-filter> 
    </activity> 

</application> 

我很欣賞,如果你可以去看看...

回答

5

你的問題就出在你的Java代碼,其中的某處你正試圖發送android.appwidget.action.APPWIDGET_UPDATE廣播。這是由操作系統廣播的,而不是應用程序,這就是Permission Denial的意思。

+0

嗯,你是對的!我試圖從小部件的配置活動發送更新。 因此,應用程序不允許發送'ACTION_APPWIDGET_UPDATE',是不是? – Ency

+1

@Ency:如果您嘗試將它發送到整個系統,則不是。如果您試圖在自己的應用程序小部件中觸發更新,則可以使用'Intent'上的'setClass()'將其限制爲您自己的'AppWidgetProvider'。 – CommonsWare

+0

太棒了,那是我需要的部分。謝謝! – Ency

相關問題