java - 如何将数据从服务传递到 Java 中的主要活动
问题描述
目的是使通知显示为通知,并且通知的内容也显示在使用 firebase 的主要活动中。我尝试过使用意图,但它不起作用。任何帮助都感激不尽。
这是发件人代码(MyfirebaseMessagingService)
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;
import android.os.Bundle;
import android.widget.TextView ;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
String dodo = "Kwifo";
String message = "Wan Ma bu";
/* String title = remoteMessage.getData().get("message").toString() ;
String message = remoteMessage.getData().get("data").toString() ;*/
// String title1 = remoteMessage.getData().get("title").toString();
Intent intent = new Intent(this, MyFirebaseMessagingService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("data",dodo); //i will love to send data to the MainActivity
intent.putExtra("message",message);
startActivity(intent);
}
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Body: " + remoteMessage.getNotification().getBody());
String msg = remoteMessage.getNotification().getBody();
Toast.makeText(MyFirebaseMessagingService.this, msg, Toast.LENGTH_SHORT).show();
}
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(remoteMessage.getNotification().getTitle())
.setContentText(remoteMessage.getNotification().getBody())
.setSmallIcon(R.mipmap.ic_launcher)
.build();
NotificationManagerCompat manager = NotificationManagerCompat.from(getApplicationContext());
manager.notify(123, notification);
}
}
这是接收器代码(MainActivity)
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.TextView ;
import android.app.PendingIntent ;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.gson.Gson;
import retrofit2.Call;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public static final String TOPIC = "/topics/deals";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (getIntent().getExtras() != null) {
for (String data : getIntent().getExtras().keySet()) {
String title = getIntent().getExtras().getString("data"); //from MyFirebaseMessagingService
// String content = getIntent().getExtras().getString("message","Default message");
//Log.d(TAG, "Key: " + Message + " Value: " + title);
// String title =getIntent().getStringExtra("data");
String content =getIntent().getStringExtra("message");
TextView tvNotify = findViewById(R.id.tradeidea) ;
tvNotify.setText(title) ;
// tvNotify.setText( "Key: " + title + " Value: " + content) ;
Toast.makeText(MainActivity.this, content,Toast.LENGTH_SHORT).show();
}
}
FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
String msg = ("Ready to recieve Trading Data");
if (!task.isSuccessful()) {
msg = getString(R.string.msg_subscribe_failed);
}
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
}
}
解决方案
MainActivity.java -- 活动
PhoneStateReceiver.java -- 后台服务
MainActivity.java
public class MainActivity extends Activity {
Context context;
BroadcastReceiver updateUIReciver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
IntentFilter filter = new IntentFilter();
filter.addAction("service.to.activity.transfer");
updateUIReciver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//UI update here
if (intent != null)
Toast.makeText(context, intent.getStringExtra("number").toString(), Toast.LENGTH_LONG).show();
}
};
registerReceiver(updateUIReciver, filter);
}}
PhoneStateReceiver.java
public class PhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
System.out.println("Receiver start");
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
Intent local = new Intent();
local.setAction("service.to.activity.transfer");
local.putExtra("number", incomingNumber);
context.sendBroadcast(local);
}
} catch (Exception e) {
e.printStackTrace();
}
}}
我希望这篇文章对你有用
推荐阅读
- amazon-web-services - AWS 应用程序负载均衡器不工作
- makefile - 仅当目标目录中不存在文件时才下载和移动文件,否则不执行任何操作
- regex - 打字稿无法解析正则表达式中的命名组
- python-3.x - TensorFlow 服务:获取输入形状和标签
- ssas - 我们可以在 where 条件下对度量应用过滤器吗?
- pandas - 将多个列表转换为一个 DataFrame
- python - Python3 在函数 django 中使用导入的模块
- java - 我的关键侦听器/关键事件部分中是否缺少某些东西阻止精灵在 Java 中移动
- sql - 如何创建一个变量/参数,它是 SQL SSMS 中的一串值,我可以在 where 子句中用作替代项?
- javascript - 如何重置茉莉花中的间谍?