2016-10-17 14 views
0

私はサービスを作成しました。また、通知を作成しました。サービスが実行されると通知があります。 は今、私は、ユーザーが通知を却下/スワイプすることができるようにしたいが、やろうとしているときに、私は二つの問題に遭遇しました:作成したサービスの通知を却下できません

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

     password = intent.getStringExtra("password"); 
     number = intent.getStringExtra("number"); 


    Intent activityIntent = new Intent(this, MainActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, 
      activityIntent, PendingIntent.FLAG_UPDATE_CURRENT); 


    Notification notification = new Notification.Builder(this). 
      setContentTitle(getText(R.string.app_name)). 
      setContentText("Subject"). 
      setContentInfo("Doing stuff in the background..."). 
      setSmallIcon(R.drawable.ic). 
      setAutoCancel(true). 
      setContentIntent(pendingIntent).build(); 

    startForeground(1, notification); 


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

をこのコードは完全に働いた、このコードの唯一の問題は、ユーザーができないということです周りの検索から、私は私が

NotificationManager notificationManager = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    notificationManager.notify(0,notification); 

で「startForeground」関数を置き換えることによって、それを修正することができますことを発見し、それが働いて、私は却下スワイプすることができ、しかし、今、私は別の問題を取得し、Iいったんので、通知をスワイプ却下私のアプリケーションを閉じる(中ボタンを長押ししてすべてのアプリケーションを閉じる) 私意図がnullであるかのように

password = intent.getStringExtra("password"); 

:アプリはしばらく後にラインを指しNullPointerExceptionがthrrows。これは、startForeground関数を使用すると発生しません。

何が問題なのですか?

答えて

0

サービスが破砕して実行されているプロセスの処理には、次の3つのオプションがあります。 START_STICKY、START_NOT_STICKY、START_REDELIVER_INTENT。 サービスを再ロードし、一旦それが崩壊したら、その意図を保持したかったのです。 START_REDELIVER_INTENTがトリックを行い、サービスを再開し、その意図を再配信します。 START_STICKY、ほとんどのトリックでしたが、START_STICKYの問題は、サービスを再起動しても、ヌルインテントであることでした。

+0

あなたは正しいですが、私はSTART_NOT_STICKYソリューションを提案した理由であなたのサービスを再開したいとあなたの質問で言及していませんでした。 –

+0

あなたはそうです、申し訳ありません、私はそれを言及していないようでした。 – javaLovah

1

onStartCommand()でSTART_NOT_STICKYを返します。

関連する問題