1

アプリケーションは 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 の両方の後に呼び出されます) には、インテントにエクストラがある場合とない場合があります。

私たちは何か間違ったことをしていますか、それともこれは予期されていることですか?

4

0 に答える 0