2012-02-22 12 views
2

私は活動しています。テキストが動的に変化するボタンが含まれています。このテキストを私の放送受信機に渡して、SMSを受信したいと思います。私の放送受信機はテキストを受信し、テキストに基づいてサービスを開始または停止する必要があります。これを行う方法?activityからbroadcastreceiverに値を渡し、ブロードキャスト受信者からサービスを開始してください。

答えて

5

BroadcastReceiverが別のクラスファイルで定義されている場合は、その受信者に値をブロードキャストするだけでもかまいません。あなたの受信機に

Intent in = new Intent("my.action.string"); 
in.putExtra("state", "activated"); 
sendBroadcast(in); 

:あなたの活動の

:値を受信すると、受信者のcontext

アップデートを使用してサービスのための魔法を行う

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    Log.i("Receiver", "Broadcast received: " + action); 

    if(action.equals("my.action.string")){ 
    String state = intent.getExtras().getString("state"); 
    //do your stuff 
    } 
} 

でマニフェストxml:

<receiver android:name=".YourBroadcastReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     <action android:name="my.action.string" /> 
     <!-- and some more actions if you want --> 
    </intent-filter> 
</receiver> 
+1

を使用してサービスを開始することができます私の活動、受取人とサービスのために。私はIntentを使って自分のアクティビティから値を送信しようとしました=新しいIntent();バンドルバン=新しいバンドル();bun.putString( "state"、 "activated"); in.putExtras(bun); sendBroadcast(in); - ブロードキャストレシーバーを使ってこれを受信する方法。注:私のブロードキャストレシーバーはすでにバンドルを使用してSMSを受信して​​おり、それに基づいていくつかの操作を実行しています。 – xyzandroid

+1

BroadcastReceiverはインテント内で定義された**アクション**文字列で動作します。ですから、例えば 'in.setAction(" my.action.string ");のように、それをブロードキャストする前に定義する必要があり、' intent.getAction() 'を使ってこのアクション文字列を受信機で捕捉する必要があります。あなたの受信機が 'intent-filter *セクションで' my.action.string'を定義していることを確認してください – waqaslam

+0

その文字列は何でもかまいませんか?マニフェストで使用されているアクションを渡す必要がありますか? – xyzandroid

1

私は3つの別々のクラスを持っている受信機に意図を送るあなた活性を有し、かつ余分な

Intent i= new Intent(this, YourReceiver.class); 
i.putExtra("txt", "the string value"); 
startActivity(i) 

としてテキストを渡し、その後、あなたの受信機では、startService function

+1

startActivityは、活動に値を渡すために使用されます..私は活動から受信者に値を渡したいと思います – xyzandroid

関連する問題