【发布时间】:2017-11-16 07:26:22
【问题描述】:
我正在构建一个能够从 FirebaseMessagingService 捕获意图的服务。
我使用的第一个版本在主要活动的应用程序级别执行此操作,但我不想再在此级别处理它。我创建了如下意图服务:
package com.seb.sebastien.appservices;
import android.app.IntentService;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import android.content.IntentFilter;
import android.telephony.TelephonyManager;
import android.util.Log;
public class appsControlIntentService extends IntentService {
public static final String REQUEST_MSG = "request";
public static final String RESPONSE_MSG = "response";
public static final String TAG = "appsControlIntentService";
private String type_sim;
public appsControlIntentService() {
super("appsControlIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
boolean request = intent.getBooleanExtra(REQUEST_MSG, false);
if(request == true) {
sendResponse("Enable");
handleAction(getCarrier());
registerAllReceivers();
}
else if (request == false) {
sendResponse("Disable");
unRegisterAllReceivers();
disableAction();
}
else
Log.e(TAG, "Error msg");
}
...
/* Firebase and SIM */
private BroadcastReceiver serviceBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Broadcast received");
if (intent.getExtras().getString(appFirebaseMessagingService.FIREBASE).equals(appFirebaseMessagingService.FIREBASE))
type_sim = intent.getExtras().getString(appFirebaseMessagingService.SIM_TYPE);
else if(intent.getExtras().getString(SimNotificationService.EXTRA_SIM_STATE) != null)
Log.d(TAG, "Get something from Sim");
else
type_sim = null;
if(type_sim != null){
handleAction(type_sim);
}
}
};
private void registerAllReceivers(){
Log.d(TAG, "Broadcast receiver register");
registerReceiver(serviceBroadcastReceiver, new IntentFilter(appFirebaseMessagingService.INTENT_FILTER));
}
private void unRegisterAllReceivers() {
if (serviceBroadcastReceiver != null) {
unregisterReceiver(serviceBroadcastReceiver);
serviceBroadcastReceiver = null;
}
}
@Override
public void onDestroy() {
unRegisterAllReceivers();
super.onDestroy();
}
}
此意图服务注册一个广播接收器,以便能够接收 firebase 广播,如下所示:
package com.seb.sebastien.appservices;
public class appFirebaseMessagingService extends FirebaseMessagingService {
public static final String TAG = "appFirebaseMessagingService";
public static final String INTENT_FILTER = "INTENT_FILTER";
public static final String FIREBASE = "firebase";
public static final String SIM_TYPE = "simtype";
public appFirebaseMessagingService() {
}
/* @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
} */
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
String sim = null;
Log.d(TAG, "From: " + remoteMessage.getFrom());
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
sim = remoteMessage.getNotification().getBody();
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
Intent intent = new Intent(INTENT_FILTER);
intent.putExtra(FIREBASE, FIREBASE);
intent.putExtra(SIM_TYPE, sim );
sendBroadcast(intent);
}
}
调试时,我看到我们一直到 sendBroadcast,但如果我注册了接收器,“appControlIntentService”类事件中似乎没有收到任何内容。
知道为什么在意图服务中没有收到广播吗?
【问题讨论】:
标签: android firebase intentservice android-broadcastreceiver android-intentservice