我有一个问题,我想我可能不是它导致它的原因。在我的活动中,数据会在按钮单击时发布到服务器。
服务器然后处理此请求并使用您的号码在您的手机上启动网络PROMPT,如USSD中的提示。
现在问题就是提示出现的那一刻,用户需要选择一个选项并输入他们的密码以完成请求。在验证此请求后,在服务器上,我使用FCM发布到应用程序。现在,当消息传递服务收到此请求时,我将广播发送到当前活动。
我的活动收到广播,通知应用程序让用户参加最后的活动。
现在这在我的模拟器上完美运行,但在我的手机上却没有。我检查了我的日志,注意到接收器没有被电话呼叫,我不知道为什么。我有一种感觉它与应用程序失去焦点有关,或者在提示出现时有所作为。我不太确定。
修改
MyFireBaseMessagingService.java:
public void onMessageReceived(RemoteMessage remoteMessage) {
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
Map<String, String> data = remoteMessage.getData();
if (data.containsKey("method") && data.containsKey("action")) {
String action = data.get("action");
switch (action) {
case "/checkout":
Log.d("onMessageReceived", data.toString());
Intent i = new Intent();
i.setAction("com.xxxxxx.xxxxxx.CHECKOUT");
i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
i.putExtra("data", new JSONObject(data).toString());
sendBroadcast(i);
break;
default:
Log.d("Default", action);
break;
}
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
}
MyBroadcastReceiver.java:
private class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
showProgress(false);
Intent checkoutIntent = new Intent(PaymentActivity.this, CheckoutActivity.class);
startActivity(checkoutIntent);
}
}
MyActivity.java:
@Override
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter("com.xxxxxx.xxxxxx.CHECKOUT");
filter.setPriority(999);
mBroadcastReceiver = new MyBroadcastReceiver();
mContext.registerReceiver(mBroadcastReceiver, filter);
}
@Override
public void onPause() {
super.onPause();
mContext.unregisterReceiver(mBroadcastReceiver);
}
答案 0 :(得分:0)
这是你可以尝试的。从registerReceiver
移除广播onResume
,从unregisterReceiver
移除onPause()
。
然后,添加一个新类:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent checkoutIntent = new Intent(context, CheckoutActivity.class);
context.startActivity(checkoutIntent);
}
}
将此添加到您的清单(并确保更改操作):
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.xxxxxx.xxxxxx.CHECKOUT" />
</intent-filter>
</receiver>
现在试试。
这样,即使您的活动onPause()
被调用,onReceive()
上的BroadcastReceiver
仍然会被调用。
答案 1 :(得分:0)
如果&#34;现在,这在我的模拟器上完美运行,但在我的手机上却没有。&#34;。我想你需要检查android权限。