2011-09-12 100 views
2

是否可以直接從PreferenceScreen發送廣播意圖?從PreferenceScreen發送廣播意圖?

例如,我想這樣做如下:

<PreferenceScreen android:title="Enable"> 
<intent android:action="com.otherapp.ENABLE" /> 
</PreferenceScreen> 

但是當我嘗試這一點,應用FC的W/ActivityNotFoundException。

BTW,接收器被簡單地定義爲:

<receiver android:name=".Receiver"> 
<intent-filter> 
<action android:name="com.otherapp.ENABLE" /> 
</intent-filter> 
</receiver> 

該廣播接收器已經過測試工作確定,只是不能從PreferenceScreen。

TIA!

+0

哪些活動是NotFound? –

+0

無......「找不到處理com.otherapp.ENABLE的活動」。它確實適用於Activity(定義時),但我希望我可以直接發送廣播意圖。 – Jon

+0

我認爲,爲了使其發揮作用,您必須在清單中目標活動元素的意圖過濾器中定義意圖。 –

回答

-2

我認爲,您應該在清單中添加類別android.intent.category.DEFAULTintent-filter。 它應該看起來像這樣:

<receiver android:name=".Receiver"> 
    <intent-filter> 
     <action android:name="com.otherapp.ENABLE" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</receiver> 
+0

它不起作用:-( – pommedeterresautee

+0

它無法工作。活動意圖不是廣播意圖,無論類別 – njzk2

0

首選項將意圖發送到活動,而不是廣播接收者。如果你想將意向發送到廣播接收器,創建轉發意圖廣播接收機

public class ForwardingActivity extends Activity { 
    @Override 
    protected void onStart() { 
     super.onStart(); 
     Intent incomingIntent = getIntent(); 
     Intent outgoingIntent = new Intent(incomingIntent); 
     outgoingIntent.setComponent(null); // unblock recipients 
     sendBroadcast(outgoingIntent); 
    } 
} 

沒有UI活動

<activity 
     android:name=".ForwardingActivity " 
     android:theme="@android:style/Theme.NoDisplay" > 
     <intent-filter> 
      <action android:name="com.otherapp.ENABLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
5

可以擴展Preference使它發送一個廣播點擊時:

public class BroadcastPreference extends Preference implements Preference.OnPreferenceClickListener { 
    public BroadcastPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     this.setOnPreferenceClickListener(this); 
    } 

    @Override 
    public boolean onPreferenceClick(Preference preference) { 
     getContext().sendBroadcast(getIntent()); 
     return true; 
    } 
} 

然後在xml文件中使用您的自定義首選項

<com.app.example.BroadcastPreference android:title="Enable"> 
    <intent android:action="com.otherapp.ENABLE" /> 
</com.app.example.BroadcastPreference>