私のブロードキャストレシーバでは、私のMainActivityクラスにある別のメソッドを呼び出すメソッドにアクセスしています。私のMainActivityクラスのメソッドは、onCreateメソッドで設定された変数を使用します。ブロードキャストレシーバからのTextViewへのアクセス
私が抱えている問題は、ブロードキャストレシーバーがこのメソッドにアクセスしようとすると、アプリケーションが閉じられたときに、変数を設定するためにonCreateメソッドが実行されていないためです。
ブロードキャストレシーバーからonCreateメソッドをトリガーするか、この設定全体が間違っていますか?私はコードを少し凝縮しようとしましたが、それほど長くはありませんでしたが、あなたの下に私がしようとしていることの要点を見ることができます。
エラーは、setTextを実行しようとすると「text」と「ringer」がnullであることです。これは、アプリが閉じていて実行中でないときにブロードキャストレシーバーが実行された場合にのみ発生します。
public class WifiScanCompleteReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
...
}
public static void activate() {
...
MainActivity.statusText();
}
}
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
...
setContentView(R.layout.activity_main);
text = (TextView)findViewById(R.id.state);
ringer = (TextView)findViewById(R.id.mode);
state = mSettings.getString("state", "init");
mode = mSettings.getInt("ringer", 0);
statusText();
}
public static void statusText() {
text.setText(state);
if (mode == 1) {
ringer.setText("Vibrate");
} else if (mode == 2) {
ringer.setText("Normal");
} else {
ringer.setText("Unkown");
}
}
}
onCreate()にnullがありますか? –
onCreateを実行すると、nullではありません。しかし、アプリケーションが閉じられた後にonReceiveが実行されると、onCreateは実行されず、nullになります。 – Oliver84
私はあなたが何を望んでいるのか分かりません。明らかに、アプリケーションが閉じている場合、それらのビューは存在しません。放送受信機がstatusText()を呼び出すと、アプリが自発的に起動することを意図していますか?これがB.R.から可能かどうかわかりません。 startActivity()を呼び出してみてください。 –