2016-04-29 8 views
-2

Ich habe 2 Aktivität Eins sendet ein Broadcust und ein anderes Empfangen. Aber Empfänger nie bekommen genannt -BroadcastReceiver registriert in einer Aktivität nie erhalten

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

Manifest

<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

Es zu verwenden. Sie können keine Sendung von einer Aktivität an eine andere senden, die zweite Aktivität wird nicht fortgesetzt. Wenn Sie in der zweiten Aktivität etwas tun müssen, starten Sie es mit einem Bündel in der Startabsicht, das sagt, warum es gestartet wurde. – Francesc

+0

Zwei offensichtliche Fehler hier! 1) Ihre innere Klasse sollte als statisch deklariert werden. Setzen Sie einfach vor den Namen statisch. 2) Wenn Sie in der inneren Klasse angeben, müssen Sie den Namen der Container-Klasse auch in der Referenz auf die innere Klasse angeben. In Ihrem Fall haben Sie .ToastDisplay als den Namen der inneren Klasse angegeben, der der Paketname vorangestellt wird. Aber es gibt keinen Namen für die Containerklasse. Versuchen Sie, das als Namen ".MainActivity.ToastDisplay" zu setzen oder versuchen Sie, den vollständigen Paketnamen + Container-Klassen + innere Klasse als Namen zu setzen. – user3646774

+0

@ user3646774 Danke Mann, ich habe das Problem gelöst. Bitte upvote. – Anirban

Antwort

-1

Sie können eine Aktivität von Boradcast nicht an eine andere Aktivität senden. Also musst du es wie unten tun.

Implementieren Sie den Empfänger zuerst als separate Klasse.

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

Und manifestieren sollte wie unten sein.

 <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

Ich folgte diesem Tutorial - http://www.sanfoundry.com/java-android-program-demonstrate-local-broadcast-manager/ – Anirban

0

Sie können auf diese Weise auch Broadcast-Empfänger in Ihrem setzen.

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

Broadcast Empfänger kann durch folgende Absicht aufgerufen werden. Sie können diese Absicht überall dort verwenden, wo Sie diesen Rundfunkempfänger anrufen möchten. Zum Beispiel gibt es zwei Aktivitäten und in diesen beiden Aktivitäten verwenden Sie diesen Empfänger und Sie rufen diese Absicht von einer anderen Klasse auf, die die Serverantwort oder das Datenbankergebnis behandelt. Ganz gleich, welche Aktivität vor diesem Aktivitätsempfänger steht, dh Aktivität eins ist vorne, wenn Sie diese Empfängerintention aufrufen, dann wird Empfänger in der Aktivität ausgelöst.

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

Wenn die Sendung innerhalb der App passieren wird, dann ist es gut, kann nur 1 zu einem bestimmten Zeitpunkt aktiv 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

Es funktioniert nicht – Anirban

+0

in dem obigen Code gibt es keinen Aufruf an 'sendBroadcast() '. stelle sicher, dass du diese Methode aufgerufen hast.Auch der BroadCastReceiver in ToastDisplayActivity sollte mindestens einmal registriert sein, um Broadcast empfangen zu können. überprüfe das auch. – arjun