关闭应用程序时无法在SQLite或共享首选项中存储数据



我已经尝试了SO上提供的大多数解决方案。但是,无法解决这个问题。 问题:当FCM通知到达时,我正在启动将通知内容存储到sqlite中的服务。虽然它在应用程序打开时工作,但在应用程序关闭时它不起作用!!

这是我用来存储在sqlite中的服务类>。

public class NotiDataStoreService extends Service {
DatabaseHelper db;
String messageBody = "";
public Runnable mRunnable = null;
public NotiDataStoreService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
final Handler mHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
db = new DatabaseHelper(NotiDataStoreService.this);
messageBody = intent.getStringExtra("messageBody");
addNotification(messageBody);
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("notification_details",Context.MODE_PRIVATE);
int noti_counter = sharedPref.getInt("count",0);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("count", ++noti_counter).apply();
}
};
mHandler.postDelayed(mRunnable, 1000);
return super.onStartCommand(intent, flags, startId);
}
public void addNotification(String messageBody){
File databaseFile = getDatabasePath(Constants.DATABASE_NAME);
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(databaseFile,"", null);
ContentValues values = new ContentValues();
values.put("notification", messageBody);
// Inserting Row
Log.i("hexa:", "notification inserting locally");
db.insert(Constants.TABLE_NOTIFICATIONS, null, values);
db.close(); 
}
}

任何帮助将不胜感激。 谢谢。。!:)

来自 FCM 文档。

要接收消息,请使用扩展FirebaseMessagingService的服务。服务应覆盖onMessageReceivedonDeletedMessages回调。它应该处理收到后10 seconds内的任何消息。之后,Android 不保证执行,并可能随时终止您的进程。如果您的应用需要更多时间来处理消息,请使用 Firebase 作业调度程序。

为大多数消息类型提供了onMessageReceived,但以下情况除外:

Notificationappbackground.在这种情况下,notification将传递到 设备的system tray.用户点击notification打开应用 默认情况下为启动器。

Messages同时具有notificationdata有效载荷,两者backgroundforeground.在这种情况下,notification是 传送到设备的system traydata有效载荷为 在启动器活动的intentextras交付。

总结:

App state    | Notification       | Data               | Both
----------------------------------------------------------------------------
Foreground   | onMessageReceived  | onMessageReceived  | onMessageReceived
----------------------------------------------------------------------------
Background   | System tray        | onMessageReceived  | Notification: system tray
Data: in extras of the intent.

溶液:

从上述指南来看,客户端应用似乎在foregroundbackground状态onMessageReceived()收到data消息。因此,如果要
同时处理foregroundbackground状态的消息,则应发送具有data有效负载的推送消息。

这里有一个关于FCM的好教程(NotificationData payload):

使用 Firebase Cloud Messaging FCM 和 PHP 的 Android 推送通知

希望这会有所帮助~

相关内容

  • 没有找到相关文章

最新更新