2016-03-29 13 views
1

ブロードキャストレシーバでアラームマネージャを使用しています。指定された時間が発生した場合、余分なパラメータでMainActivityを更新する必要があります。ここブロードキャストレシーバからアクティビティが呼び出されていません

コードがlogcatで

public void onReceive(Context context, Intent intent){ 

//calculate time 

//check time 
if(isTime){ 

     Log.d("tag", "sleep"); 

      //set value in shared preference 
      editor = (context.getSharedPreferences("uniqueId", 0)).edit(); 
      editor.putBoolean("sleepmode",false); 
      editor.apply(); 

     Intent gotoSmileyScreen = new Intent(context, MainActivty.class); 
     gotoSmileyScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     context.startActivity(gotoSmileyScreen); 
     } 
} 

放送受信機である、私は「スリープ」を見ることができていますので、私は方法がここ

は内のコードで適切なタイミングで呼び出されているのを知っていますMainActivity

//inside on create 
    //get value from shared preference and check 

if(!isSleepMode){ 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    }else{ 
     //do nothing 
    } 

ユーザーはほとんどすでにその活性が必ずしも必要ではないだろう。 アクティビティが一部のデバイスに対して呼び出されていて、画面が期待どおりにオフになりますが、他のアクティビティではアクティビティがインテントから呼び出されず、画面が消えません。

ドキュメント、Intent.FLAG_ACTIVITY_CLEAR_TASKから
  1. は、再びそれを呼び出す前にアクティビティをクリアする必要がありますか私は何かが足りないのですか?

  2. 受信者からアクティビティを再度呼び出すことなく更新する方が良いでしょうか?

編集:私のアプリはランチャーであり、インテントを呼び出す効果がありますか?

答えて

2

MainActivityでIntent.FLAG_ACTIVITY_SINGLE_TOPを使用し、onNewIntentを無効にする回避策が見つかりました。アクティビティがすでに一番上にある場合、onNewIntentを呼び出すと、アクティビティの新しいインスタンスが作成されます。新しいコードは次のようになります

gotoSmileyScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

となります。誰かを助けることを願っています。

0
以下のように自分の意図を変更し、放送受信のために

Intent gotoSmileyScreen = new Intent(); 
    gotoSmileyScreen.setClassName("com...<Your broadcast receiver name>", "com.....MainActivty.class"); 
    gotoSmileyScreen.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(gotoSmileyScreen); 

を試してみてください

上記のようにしてみてください。

0

活動を更新するための別の方法は、

はonReceiveメソッドの内部でこれをacheiveするには、動的放送受信機を使って、アクティビティ内のアクティビティの広告にデータを送信するためにsendBroadcastを使用することである データを受信する放送受信機を登録

動的ブロードバンド受信者をonCreate()内に登録し、onDestroy()内で登録解除

関連する問題