2017-08-24 6 views
0

私は、予定されているオブジェクトの配列から次のリマインダが通知されたときに通知するリマインダーアプリを持っています。BOOT_COMPLETEを受け取った後にMainActivityにアクセスする

私は起動時に再度通知を設定しようとしています。

私は起動レシーバをすべてマニフェストに設定していますが、アプリケーションがまだ開かれていなければ、電話が起動したらMainActivityの情報にアクセスするにはどうすればよいですか?

私はこれを使用することを期待していた -

public class BootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("RegularReminders","onReceive"); 
     new MainActivity().setNotifications(); 
    } 
} 

しかし、それはMainActivityでメソッドを実行しようとしたら、それは最高のエミュレータブーツとして、その通知内からアプリのクラッシュをヌルエラーを返し、私はこれを参照してくださいlogcatに -

java.lang.RuntimeException: Unable to start receiver com.androidandyuk.regularreminders.BootReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 

これはラインを指す -

if (reminders.size() >= 0) { 

私はSharedPrefsに通知メッセージを保存し、それを受信側で呼び戻すことができたのだろうかと思ったが、nullのオブジェクト参照にもエラーがある。

追加情報を追加して別のブロードキャストを送信しようとしましたが、MainActivityで設定した受信者は、アプリケーションが実行されていないためリッスンしていないと思いますか?

私はGoogleがMalwareから私たちを保護していると知っていますが、これは本の後ではあまり気にしませんが、何らかの方法でこれがあるので再起動後に通知を設定できますか?

ありがとうございました。

+0

あなたがdownvoteに行くなら、少なくとも私が学ぶことができる理由を私に教えてください。私はこの答えを探して数時間を費やしましたが、私はここで見つけたいくつかの異なるものを試しましたが、喜びはないので、私は尋ねます。私が必要とするすべての情報をレイアウトしたと思うので、間違ったことを教えてください。ありがとう。 – AndyCr15

答えて

1

MainActivityから変数にアクセスすることはできませんが、SharedPreferencesとアプリケーションで使用されているSQLiteデータベースにアクセスすることができます。この場合、新しい配列を作成してデータベースを読み込んで処理しました。

0

問題は、ACTION_BOOT_COMPLETEDを受け取ったときにあなたのアクティビティが作成されないということです。

あなたができることは、起動が完了した後であなたの活動を開始し、何らかの仕事をするために引数を渡すことです。

public class BootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("RegularReminders","onReceive"); 
     if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { 
      Intent i = new Intent(context, YourActivity.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      Bundle args = new Bundle(); 
      //put some args inside the bundle 
      //attach the bundle 
      i.putExtras(args); 
      //start the activity 
      context.startActivity(i); 
     } 
    } 
} 

あなたのアクティビティを開始して表示することができない場合は、 Android Servicesを使用できます。

+0

ありがとうございます。それは私が実際にサービスを調べるのに理にかなっています。 GPSの位置を別のアプリに報告するときにこれをやったので、オブジェクトの配列を監視するサービスを設定できると思います。私は、BootReceiverを使ってサービスを開始すると仮定します。実際に、あなたが与えたリンクを素早く見て、たぶん私は仕事を予定していますか?私は以前にそれらを使用していない、それらを研究する必要があります。ありがとう。 – AndyCr15

関連する問題