0

Androidのメーカー働いて送るが、受信側ブロードキャストが機能していない:3.0、Androidのマシュマロ放送が

SendBroadcast:

package com.example.android.sendbroadcast; 
public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 
public void onsendbroadcast(View view){ 
    Log.v("Inside","OnCLICK"); 
    Intent intent=new Intent(); 
    Log.v("Intent","Created"); 
    intent.setAction("com.example.android.sendbroadcast"); 
    Log.v("Action","Set"); 
    intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
    sendBroadcast(intent); 
    Log.v("Broadcast","Sent"); 
} 
} 

放送を受信

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.Toast; 

public class MyReceiver extends BroadcastReceiver { 
public MyReceiver(){ 

} 
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.v("Inside","Reciever"); 
    Toast.makeText(context,"Broadcast Recieved",Toast.LENGTH_LONG).show(); 

} 
} 

アンドロイドたManifest.xml

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <receiver 
     android:name=".MyReceiver" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="com.example.android.sendbroadcast"></action> 

     </intent-filter> 

    </receiver> 
</application> 

上記の送信ブロードキャストが正しく実行されています。私もログを使ってチェックしました。しかし、受信ブロードキャストは実行されていません。トースト/ログメッセージは表示されません。理由は何ですか?

+0

BroadcastReceiverにIntentFilterを登録していないことがわかりました –

+0

なぜMainActivityはマニフェストに登録されていませんか? – Munir

答えて

0

ブロードキャストは、コードのどこでもContextインスタンスを取得できる場所で使用できます。しかし、受信するには、特定のブロードキャストを聴取する必要があります。このブロードキャストは、単純なIntentFilterで行うことができます。次に、指定したインテントフィルタでBroadcastReceiverを登録できます。実装例を以下に示します。

Intent in = new Intent(Constants.NETWORK_CHANGE); 
in.putExtra(Constants.NETWORK_STATE, Constants.DISCONNECTED); 
context.sendBroadcast(in); 

簡単な方法はまた、以下詳述されて受信する:

シンプルな放送は、私はここでそれを送信するためにコンテキストオブジェクトを使用しています、送信する(フラグメントおよび他のいくつかのクラスがあることが必要です)

まず、IntentFilterとBroadcastReceiverを登録し、BroadcastReceiverインスタンス

private BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getStringExtra(Constants.NETWORK_STATE).equals(Constants.DISCONNECTED)) { 
       //do something here 
      } 
     } 
    }; 

次にを作成、良い場所のonCreate又はonResumeメタでありますあなたの実行可能なクラス(フラグメント、活動、サービスまたはApplcationクラス)の外径:

@Override 
    protected void onResume() { 
     super.onResume(); 
     registerReceiver(receiver, new IntentFilter(Constants.NETWORK_CHANGE)); 
    } 

IntentFilterは、Androidデバイス上での意図の多くを送信しますので、あなたは、あなたのaplicationで適切なコールをつかむ作るものです。