Я использую Сервис в своем приложении для отправки уведомлений пользователю после того, как пользователь выходит из приложения; это работает, но у меня есть одна проблема после того, как пользователь выходит из приложения каждый раз, когда он получает последнее уведомление, полученное каждый раз, когда он входит и выходит, одно и то же уведомление повторяется, даже если нового уведомления нет. Это проблема. Уведомления следует отправлять пользователю только один раз, и если он выйдет в следующий раз, его не следует отправлять снова. Просто если у него есть новое уведомление с новым идентификатором, оно должно быть отправлено пользователю один раз.
Это класс моих услуг
public class MyService extends Service {
public MyService() {
}
@Override
public void onCreate(){
super.onCreate();
}
@Override
public int onStartCommand(Intent intent,int flags,int startId){
Toast.makeText(this, "Start myServis", Toast.LENGTH_LONG).show();
// run_loop();
return START_STICKY;
}
@Override
public void onDestroy(){
Toast.makeText(this, "Stopmyservci", Toast.LENGTH_LONG).show();
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
Я получаю данные по этому коду ..
public void run_loop(){
String url = "http://00000000/testnet/android_register_login/ShowAllData.php";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("data");
JSONObject hit = jsonArray.getJSONObject(0);
String id = hit.getString("id");
int lastThread = Integer.parseInt(String.valueOf(id));
JSONObject jsonObject = null;
Toast.makeText(MainActivtiy.this, lastThread + "", Toast.LENGTH_SHORT).show();
if (app.getTotal_threads() < lastThread) {
app.setTotal_threads(lastThread);
Notification notification = new NotificationCompat.Builder(MainActivtiy.this)
.setSmallIcon(android.R.drawable.ic_popup_reminder)
.setContentTitle("title")
.setContentText("message")
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.build();
notificationManager.notify(1, notification);
}
} catch(JSONException e){
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);
Handler handler=new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
run_loop();
}
},10000);
}
public void onBackPressed() {
Intent sr =new Intent(this, MyService.class);
startService(sr);
Toast.makeText(this, "Exit", Toast.LENGTH_SHORT).show();
finish();
run_loop();
super.onBackPressed();
}
Я храню id здесь
public class App extends Application {
public static final String CHANNEL_1_ID = "channel1";
public static final String CHANNEL_2_ID = "channel2";
private int Total_threads;
@Override
public void onCreate() {
super.onCreate();
createNotificationChannels();
}
public int getTotal_threads() {
return Total_threads;
}
public void setTotal_threads(int Total_threads) {
this.Total_threads = Total_threads;
}
private void createNotificationChannels() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel1 = new NotificationChannel(CHANNEL_1_ID, "Channel 1", NotificationManager.IMPORTANCE_HIGH
);
channel1.setDescription("This is Channel 1");
NotificationChannel channel2 = new NotificationChannel(CHANNEL_2_ID, "Channel 2", NotificationManager.IMPORTANCE_LOW
);
channel2.setDescription("This is Channel 2");
NotificationManager manager = getSystemService(NotificationManager.class);
manager.createNotificationChannel(channel1);
manager.createNotificationChannel(channel2);
}
}
}
и получаю его отсюда
private void JSON() {
String url = "http://00000000/test/Showall.php";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject hit = jsonArray.getJSONObject(i);
JSONObject jsonObject = null;
String id= hit.getString("id");
app.setTotal_threads(Integer.parseInt(String.valueOf(id)));
}
Что я могу попробовать дальше?