web-dev-qa-db-ja.com

androidのアクティビティからブロードキャストレシーバーを開始します

アクティビティから放送受信機を起動したい。ブロードキャストレシーバーを拡張するSecond.Javaファイルと、ブロードキャストレシーバーを開始する必要があるMain.Javaファイルがあります。また、Main.Javaで次のようにすべてを試みましたが、マニフェストファイルで定義する方法がわかりません...

Main.Java:

public class Main extends Activity {
/** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
String rec_data = "Nothing Received";
private BroadcastReceiver myReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            if( intent.getStringExtra("send_data")!=null)
                    rec_data = intent.getStringExtra("send_data");
            Log.d("Received Msg : ",rec_data);
        }
    }; 
    }
    protected void onResume() {
        IntentFilter intentFilter = new IntentFilter();
        //intentFilter.addDataType(String);
        registerReceiver(myReceiver, intentFilter);
        super.onResume();
    }

  @Override
protected void onPause() {
// TODO Auto-generated method stub
    super.onPause();
    this.unregisterReceiver(this.myReceiver);
}

}

上記のように1つのクラスですべてを実行できない場合、Main.javaからブロードキャストレシーバーを呼び出すにはどうすればよいですか?誰かがどこで間違っているのか教えてもらえますか?ありがとう!

17
Leela

これを使用して、カスタムブロードキャストを送信します。

アクション名を定義します。

public static final String BROADCAST = "PACKAGE_NAME.Android.action.broadcast";

AndroidManifest.xmlレジスタレシーバー:

<receiver Android:name=".myReceiver" >  
    <intent-filter >  
        <action Android:name="PACKAGE_NAME.Android.action.broadcast"/>  
    </intent-filter>  
</receiver> 

登録者:

IntentFilter intentFilter = new IntentFilter(BROADCAST);
registerReceiver( myReceiver , intentFilter);

アクティビティからブロードキャストを送信します。

Intent intent = new Intent(BROADCAST);  
        Bundle extras = new Bundle();  
        extras.putString("send_data", "test");  
        intent.putExtras(extras);  
        sendBroadcast(intent);

あなたのBroadcastReceiver:

private BroadcastReceiver myReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
             Bundle extras = intent.getExtras();
           if (extras != null){  
           {
                    rec_data = extras.getString("send_data");
            Log.d("Received Msg : ",rec_data);
            }
        }
    };

カスタムブロードキャストの詳細については、 カスタムインテントとレシーバーによるブロードキャスト を参照してください

32

このチュートリアルをここで確認してください。アクティビティからサービスを開始する方法やその逆を含む、ブロードキャストに関するすべてのヘルプを取得します

http://www.vogella.de/articles/AndroidServices/article.html

2
vipin

そのためには、レシーバーのインテントをブロードキャストする必要があります。以下のコードを参照してください。

Intent intent=new Intent();
getApplicationContext().sendBroadcast(intent);

インテントのアクションとその他のプロパティを設定し、アプリケーションコンテキストを使用してブロードキャストできます。レシーバータグを使用してAndroidManifest.xmlで定義する必要がある、ここで設定したインテントのアクションは何でもかまいません。

0

この答えを確認してください:

https://stackoverflow.com/a/5473750/928361

IntentFilterで何も指定しない場合、レシーバークラスにインテントを通知する必要があると思います。

0
gutiory