2016-04-29 19 views
-2

私は2つのアクティビティにブロードキャストともう1つの受信を送信しています。しかし、受信機と呼ばれることはありません飽きない -BroadcastReceiverはアクティビティに登録されていません。

MainActivity

public class MainActivity extends AppCompatActivity { 

public static String BROADCAST_ACTION = "com.aj.SHOWTOAST"; 

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

public void sendBroadcast(View v) { 
    Intent broadcast = new Intent(); 
    broadcast.setAction(BROADCAST_ACTION); 
    this.sendBroadcast(broadcast); 
} 
} 

ToastDisplay

public class ToastDisplay extends AppCompatActivity { 
public static String BROADCAST_ACTION = "com.aj.SHOWTOAST"; 

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

    IntentFilter filter = new IntentFilter(BROADCAST_ACTION); 
    this.registerReceiver(new Receiver(), filter); 
} 

private class Receiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     Log.d("TAG", "onReceive: SMS SENT!!"); 
     Toast.makeText(getApplicationContext(), "SMS SENT!!", Toast.LENGTH_SHORT).show(); 
    } 
} 
} 

マニフェスト

<activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".ToastDisplay"> 
     <intent-filter> 
      <action android:name="com.aj.SHOWTOAST" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
+1

を使用することが良いです。 1つのアクティビティから別のアクティビティにブロードキャストを送信することはできません.2番目のアクティビティは再開されません。 2つ目のアクティビティで何かが必要な場合は、なぜそれが開始されたのかを示す開始インテントにバンドルを入れて起動します。 – Francesc

+0

2つの明白な間違いがここにあります! 1)あなたの内部クラスは静的宣言されるべきです。静的な名前の前に置くだけです。 2)内部クラスで指定する場合は、内部クラスへの参照でもコンテナクラスの名前を指定する必要があります。あなたの場合は、内部クラスの名前として.ToastDisplayを指定しました。パッケージ名が前に追加されます。しかし、コンテナクラスの名前はありません。名前を ".MainActivity.ToastDisplay"にするか、完全なパッケージ名+コンテナクラス+内部クラスを名前として入れてみてください。 – user3646774

+0

@ user3646774ありがとう、私は問題を解決しました。アップしてください。 – Anirban

答えて

-1

あなたは1つのアクティビティを別のアクティビティに送信できません。だから、あなたはそれを以下のようにしなければなりません。

最初にReceiverを別のクラスとして実装します。

Receiver.java:

public class Receiver extends BroadcastReceiver { 
    public Receiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context,"Hello", Toast.LENGTH_LONG).show(); 
    } 
} 

MainActivity.java:

public class MainActivity extends AppCompatActivity { 

    private static final String BROADCAST_ACTION = "com.aj.SHOWTOAST"; 

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

    public void sendBroadcast(View v) { 
     Intent broadcast = new Intent(); 
     broadcast.setAction(BROADCAST_ACTION); 
     this.sendBroadcast(broadcast); 
    } 
} 

とマニフェストには以下のようにする必要があります。

 <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".Receiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="com.aj.SHOWTOAST"/> 
      </intent-filter> 
     </receiver> 
+0

私はこのチュートリアルに従いました - http://www.sanfoundry.com/java-android-program-demonstrate-local-broadcast-manager/ – Anirban

0

このようにしても、広いキャスト受信機を置くことができます。

 public class SampleActivity extends AppCompatActivity { 

    public static final String DISPLAY_MESSAGE_ACTION = "com.google.android.gcm.demo.app.DISPLAY_MESSAGE"; 
    // Receive Message through Broadcast Receiver... 
    private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      String receiver = intent.getStringExtra("receiver"); 
      Toast.makeText(context, "" + receiver, Toast.LENGTH_SHORT).show(); 
     } 
    }; 

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

    @Override 
    protected void onResume() { 
     super.onResume(); 
     //registering the receiver... 
     registerReceiver(mHandleMessageReceiver, new IntentFilter(DISPLAY_MESSAGE_ACTION)); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     //Unregistering the receiver... 
     unregisterReceiver(mHandleMessageReceiver); 
    } 
} 

ブロードキャスト受信者は、以下のインテントで呼び出すことができます。このインテントを使用して、このブロードキャストレシーバーをどこに呼び出すかを指定できます。たとえば、2つのアクティビティーがあり、この2つのアクティビティーでは、このレシーバーを使用していて、サーバー応答またはデータベース結果を処理する他のクラスからこのインテントを呼び出しています。アクティビティレシーバが呼び出される前のアクティビティ、つまり、このレシーバのインテントメソッドを呼び出すと、アクティビティ1がトリガされます。

Intent intent = new Intent(SampleActivity.DISPLAY_MESSAGE_ACTION); 
intent.putExtra("receiver", "testMessage"); 
sendBroadcast(intent); 
0

放送は、アプリ内で起こるために起こっている場合、唯一の任意の時点でアクティブな1つの活性が存在することができLocalBroadCastManager

public class MainActivity extends AppCompatActivity { 

public static String BROADCAST_ACTION = "com.aj.SHOWTOAST"; 

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

public void sendBroadcast(View v) { 
    Intent broadcast = new Intent(); 
    broadcast.setAction(BROADCAST_ACTION); 
    LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(broadcast); 
} 
} 

public class ToastDisplay extends AppCompatActivity { 
public static String BROADCAST_ACTION = "com.aj.SHOWTOAST"; 

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

BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      //your code here 
     } 
    }; 
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter(BROADCAST_ACTION)); } 
} 
+0

上記のコードで – Anirban

+0

が動作しません 'sendBroadcast() '。そのメソッドを呼び出したことを確認してください。ToastDisplayActivityのBroadCastReceiverは、ブロードキャストを受信するために最低1回登録する必要があります。それもチェックしてください。 – arjun

関連する問題