2011-09-12 7 views
2

PreferenceScreenから直接ブロードキャストインテントを送信することはできますか?PreferenceScreenからブロードキャストインテントを送信しますか?

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

をしかし、私はこれを試してみてください、アプリのFCのワット/ ActivityNotFoundException:

例えば、私は次のような何かをしたいと思います。

ところで、受信機は、単に次のように定義されます

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

この放送受信機は正常に動作するためにテストが、ちょうどないPreferenceScreenからされています。

TIA!

+0

NotFoundはどのアクティビティですか? –

+0

なし... "com.otherapp.ENABLE"を処理するアクティビティが見つかりませんでした。アクティビティ(定義されている場合)では動作しますが、私はブロードキャストインテントを直接送ることができます。 – 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

設定は受信機をブロードキャストしないように、活動へのインテントを送信します。あなたが受信機をブロードキャストするインテントを送りたい、無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

と受信機

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); 
    } 
} 

をブロードキャストする意図を転送アクティビティを作成する場合は、クリックされたとき、それは、ブロードキャストを送信するために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>