6

私は処理したいバックグラウンドタスクを持っています。タスクが完了したら、主なアクティビティが表示されている場合にのみ、新しいアクティビティを呼び出して結果をユーザーに表示したいと思っています。それ以外の場合は、通知を送信して、彼が好きなときはいつでも開くことができます。アクティビティが表示されない場合にのみ通知を表示する

サービスを使用してバックグラウンドタスクの開始と終了を処理し、終了時にメッセージをブロードキャストすることを考えていましたが、この場合、アクティビティが表示されたか、ブロードキャストが処理されなかったかを知るオプションはありません私は通知を送るべきです。

これは私の問題です。バックグラウンドタスクやサービスの知識と経験が限られているため、私はいくつかの助けを求めることにしました。

私の場合を読んでくれてありがとうございました、いくつかの助けを願っています!

答えて

23

ここには、あなたが望むものを実装する方法を説明する良い記事があります:Activity or Notification via Ordered Broadcast

主なアイデアは、順序付けられたブロードキャストを使用することです。あなたは何も活動せずに生きるBroadcastReceiverを作成する必要があります。これを行うには、AndroidManifest.xmlファイルに宣言する必要があります。この受信機にはNotificationと表示されます。また、画面上に何かを表示するメインアクティビティで、別のBroadcastReceiverをより高い優先度で登録する必要があります。次に、注文された放送を送るだけです。

+0

これは、質問を投稿した後にわかった可能性のある回答であり、本当に良い練習に見えます。リンクは本当に役に立ちます、ありがとうございます。私はこれが私が従う方法だと思う! – akalipetis

+3

スーパーエレガントでうまくいきます! – Orr

+0

@Antonis:これを実装する方法をコードでお知らせください。 – Sam

2

このようにしてください。

private static boolean isInForeground; 

onResume(){ 
    isInForground = true; 
} 
onPause(){ 
    isInForground = false; 
} 

isInForgroundがtrueある場合、活動Forground(表示)に別段の表示されません。

どこからでも知りたい場合は、MainActivityで次の項目を追加します。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    onResume(){ 
     pref = PreferenceManager.getDefaultSharedPreferences(this); 
     prefEditor = prefs.edit(); 
     prefEditor.putBoolean("isInForeground",true); 
     prefEditor.commit(); 
    } 

    onPause(){ 
      pref = PreferenceManager.getDefaultSharedPreferences(this); 
      prefEditor = prefs.edit(); 
      prefEditor.putBoolean("isInForeground", false); 
      prefEditor.commit(); 
    } 

あなたのサービスから。

pref = PreferenceManager.getDefaultSharedPreferences(this); 
if(pref.getBoolean("isInForeground", false)){ 
     //MainActivity is in forground 

} 
else{ 
     //not in forground 
} 
1

サービスからスレッドにタスクを実装したいと思うようです。アクティビティには、アクティビティが表示されているかどうかを示す永続的な静的ブール値を設定できます。アクティビティはonResume()でユーザに表示され、onPause()が呼び出されると表示されません。ブール値をonResume()でtrueに設定し、onPause()でfalseを設定します。

0

あなたはSharedPreferencesを使用できます。 アクティビティがonStart()またはonStop()であるときにそのアクティビティのプリファレンスを更新し、サービスで確認してください。

希望は私が手助けします。

関連する問題