滑动清除应用程序时广播接收器停止触发
Broadcast receiver stop triggering when swipe clear the app
Broadcast receiver 停止触发 "onReceive(Context context, Intent intent)" 方法从最近的列表中清除(滑动)应用程序后,如何解决这个问题?
清单代码
<receiver
android:name="*.receiver.TestReceiver"
android:enabled="true"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<action android:name="com.google.android.c2dm.intent.REGISTER" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<category android:name="pacakge" />
</intent-filter>
</receiver>
收件人代码
public void onReceive(Context context, Intent intent) {
LogUtils.LOGD("notfy", "Receiver : ");
if(intent!=null){
Bundle extras = intent.getExtras();
if(extras!=null) {
try {
String regId = extras.getString("registration_id");
String message = extras.getString("message");
String qsid = extras.getString("id","");
String type = extras.getString("type","");
// extras.getString("aps");
/*code*/
} catch (Exception e){
LogUtils.LOGD("notfy", "onReceive last exception: " + e.getMessage());
}
}
}
}
看来问题出在服务器端,
https://firebase.google.com/docs/cloud-messaging/concept-options
有两种类型的消息
With FCM, you can send two types of messages to clients:
Notification messages, sometimes thought of as "display messages."
Data messages, which are handled by the client app.
基本上从通知更改为服务器上的数据,这将在应用程序关闭时调用 OnRecieve。
查看 link 了解更多信息和示例
在主应用程序中 start/stop 服务
Intent service = new Intent(context, MyService.class);
context.startService(service);
...
Intent service = new Intent(context, MyService.class);
context.stopService(service);
服务
public class MyService extends Service
{
private static BroadcastReceiver m_Receiver;
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onCreate()
{
Receiver();
}
@Override
public void onDestroy()
{
unregisterReceiver(m_Receiver);
}
private void Receiver()
{
m_Receiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
//place all ur stuff here
}
}
}
}
Broadcast receiver 停止触发 "onReceive(Context context, Intent intent)" 方法从最近的列表中清除(滑动)应用程序后,如何解决这个问题?
清单代码
<receiver
android:name="*.receiver.TestReceiver"
android:enabled="true"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<action android:name="com.google.android.c2dm.intent.REGISTER" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<category android:name="pacakge" />
</intent-filter>
</receiver>
收件人代码
public void onReceive(Context context, Intent intent) {
LogUtils.LOGD("notfy", "Receiver : ");
if(intent!=null){
Bundle extras = intent.getExtras();
if(extras!=null) {
try {
String regId = extras.getString("registration_id");
String message = extras.getString("message");
String qsid = extras.getString("id","");
String type = extras.getString("type","");
// extras.getString("aps");
/*code*/
} catch (Exception e){
LogUtils.LOGD("notfy", "onReceive last exception: " + e.getMessage());
}
}
}
}
看来问题出在服务器端,
https://firebase.google.com/docs/cloud-messaging/concept-options
有两种类型的消息
With FCM, you can send two types of messages to clients:
Notification messages, sometimes thought of as "display messages." Data messages, which are handled by the client app.
基本上从通知更改为服务器上的数据,这将在应用程序关闭时调用 OnRecieve。
查看 link 了解更多信息和示例
在主应用程序中 start/stop 服务
Intent service = new Intent(context, MyService.class);
context.startService(service);
...
Intent service = new Intent(context, MyService.class);
context.stopService(service);
服务
public class MyService extends Service
{
private static BroadcastReceiver m_Receiver;
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onCreate()
{
Receiver();
}
@Override
public void onDestroy()
{
unregisterReceiver(m_Receiver);
}
private void Receiver()
{
m_Receiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
//place all ur stuff here
}
}
}
}