アプリケーションは AlarmManager を使用して、特定の PendingIntent でアプリケーションを起動します。このインテントは常に正しく onReceive メソッドに渡されます。次のコードでは、alarmid と alarmuser に正しい情報があります。
@Override
public void onReceive(Context ctx, Intent intent) {
Intent i = new Intent(context, MainActivity.class);
i.putExtra("alarmid", intent.getIntExtra("id", -1));
i.putExtra("alarmuser", intent.getStringExtra("user"));
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
ただし、このインテントで startActivity を呼び出す場合、追加のデータは onCreate メソッドが呼び出された場合にのみ提供されます。したがって、このコードは正常に機能し、変数が設定されています。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent().hasExtra("alarmid") && getIntent().hasExtra("alarmuser")) {
String alarmId = getIntent().getExtras().getString("alarmid");
String alarmUser = getIntent().getExtras().getString("alarmuser");
}
}
ただし、onRestart を使用すると、空のインテント (エクストラなし) が取得されます。つまり、このコードは機能せず、変数は設定されません。
@Override
public void onRestart() {
super.onRestart();
if(getIntent().hasExtra("alarmid") && getIntent().hasExtra("alarmuser")) {
String alarmId = getIntent().getExtras().getString("alarmid");
String alarmUser = getIntent().getExtras().getString("alarmuser");
}
}
したがって、onStart (これは明らかに onCreate と onRestart の両方の後に呼び出されます) には、インテントにエクストラがある場合とない場合があります。
私たちは何か間違ったことをしていますか、それともこれは予期されていることですか?