Ich möchte GCM-Daten vom Empfänger zur Aktivität freigeben. Wenn die Aktivität aktiv/onResume/onPause-Status ist, möchte ich die Daten für die Aktivität anzeigen. Wenn die Aktivität zerstört wurde, möchte ich diese Informationen in der Benachrichtigungsleiste anzeigen.Empfängerdaten an Aktivität senden
Receiver -> GcmMessageHandler.class
import android.os.Bundle;
import com.google.android.gms.gcm.GcmListenerService;
public class GcmMessageHandler extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
String message = data.getString("message");
createNotification(message);
}
private void createNotification(String body) {
String sendDataToActivity = body; // This is value i want to pass to activity
}
}
Aktivität -> MainActivity.class
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
String RECEIVER_VALUE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
textView.setText(RECEIVER_VALUE); // Here i want to set the receiver valiue
}
}
Und hier die Benachrichtigungsfunktion.
private void Notify(String notificationMessage){
Notification notification = new Notification.Builder(getBaseContext())
.setContentText(notificationMessage) // Show the Message Here
.setSmallIcon(R.drawable.ic_menu_gallery)
.setWhen(System.currentTimeMillis())
.build();
notification.notify();
}
Ich verwende bereits die Absicht, von onNewIntent-Methode in Activity zu erhalten.
von Receiver ->
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("message",message);
getApplicationContext().startActivity(intent);
und Aktivität ->
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String message = intent.getExtras().getString("message").toString();
textView.setText(message);
}
Aber das Problem ist, wenn meine Tätigkeit der Nähe ist es, die Aktivität wieder öffnen. Jede andere Lösung außer diesem?
Sie können die Daten von Broadcastempfänger zu Aktivität übertragen.Registrieren Sie einen Empfänger in Aktivität in OnCreate und die Registrierung in onDestroy.Als können Sie eine Variable in SharedPreference hinzufügen, um jedes Mal zu aktualisieren Aktivität fortgesetzt, aktiv, auch onDestroy pausiert. Sie können von Ihrem Broadcast-Empfänger aus prüfen, ob Daten an Aktivitäten gesendet werden sollen. – Vijay
Aber ich denke, es wird nicht ausgeführt oder benachrichtigt, wenn die Anwendung in der Nähe ist. –
In Ihrer Funktion createNotification (String body)> überprüfen Sie einfach den Wert aus SharedPreference für Activity State und wenn die Aktivität läuft, übergeben Sie die Daten andernfalls an showNotification. – Vijay