广播接收器不在电话上工作

时间:2017-05-09 00:50:34

标签: android broadcastreceiver

我有一个问题,我想我可能不是它导致它的原因。在我的活动中,数据会在按钮单击时发布到服务器。

服务器然后处理此请求并使用您的号码在您的手机上启动网络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);
}

2 个答案:

答案 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权限。