2

Я создаю приложение для Android, в котором уведомление будет отправляться пользователю каждый день в определенное время. Уведомление выполняется в фоновом режиме. Я бы хотел, чтобы мои приложения позволяли пользователю отключать уведомление с помощью кнопки btnStopService. Как я могу это достичь? Я попытался, но уведомление не может быть отключено.Как отключить оповещение, выполняющееся в фоновом режиме

Примечание: предположим, что я вызываю метод startNotification в определенное время. Игнорировать цикл for внутри метода startNotification.

Эти коды для метода startNotification:

public void startNotification() { 
    notifyManager = (NotificationManager) 
      getSystemService(Context.NOTIFICATION_SERVICE); 
    notifyBuilder = new NotificationCompat.Builder(getApplicationContext()); 

    notifyBuilder.setContentTitle("Good morning"); 
    notifyBuilder.setContentText("Morning"); 
    notifyBuilder.setSmallIcon(R.drawable.bmi_cal); 
    notifyBuilder.setPriority(Notification.PRIORITY_MAX); 
    notifyBuilder.setLights(Color.BLUE, 500, 500); 
    try { 
     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
     r.play(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    if (Build.VERSION.SDK_INT >= 21) notifyBuilder.setVibrate(new long[5000]); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      for(int i=0;i<1;i++) 
      { 
       notifyManager.notify(MY_NOTIFICATION_ID, notifyBuilder.build()); 

       try { 
        Thread.sleep(1 * 1000); 
       } catch (InterruptedException e) { 

       } 
      } 

      // for (i = 0; i <= 20; i += 10) { 
       //notifyBuilder.setProgress(100, i, false); 


      // } 

      //notifyBuilder.setContentText("Bread is ready!"); 

      //notifyBuilder.setProgress(0, 0, false); 

      notifyManager.notify(MY_NOTIFICATION_ID, notifyBuilder.build()); 
     } 
    } 
    ).start(); 

} 

Эти коды для метода Команда пуска для запуска услуги:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Thread triggerService=new Thread(new Runnable() { 
     long startingTime=System.currentTimeMillis(); 
     long tics=0; 
     @Override 
     public void run() { 

      for(;;) 
      { 

       try 
       { 
        // ASSUME I trigger the notification at a specific time 
        startNotification(); 



        /* tics= System.currentTimeMillis() - startingTime; 
        Intent myFilteredResponse=new Intent("liren.action.GOSERVICE3"); 
        String msg= " value: " + tics; 
        myFilteredResponse.putExtra("serviceData", msg); 
        sendBroadcast(myFilteredResponse); */ 
        Thread.sleep(3000); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
       //notifyManager.notify(MY_NOTIFICATION_ID, notifyBuilder.build()); 
      } 

     } 
    }); 
    triggerService.start(); 
    return super.onStartCommand(intent, flags, startId); 
} 

Эти коды внутри метода btnStopService.

Метод btnStopService находится внутри класса Java класса StopNotification.

public class StopNotification extends AppCompatActivity { 
    ComponentName service; 
    Intent intentMyService; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_stop_notification); 
     intentMyService = new Intent(this, myServiceRunner.class); 
    } 

    public void btnTurnOff(View v) 
    { 
     try { 
      stopService(new Intent(intentMyService)); 
      Thread.sleep(1000); 
      Toast.makeText(getApplicationContext(), "Turn Off Notification", Toast.LENGTH_SHORT).show(); 
      finish(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

ответ

1

Просто используйте:

Intent intent = new Intent(this, YourService.class); 
stopService(intent);