Activity 的 OnCreate 中的 getIntent() 能否从 AlarmManager 获取 PendingIntent 传递的额外数据,以便自我 Activity 重启?

问题描述

10秒后启动alarmManager的代码

Intent intent=new Intent(SelfUpdateByScanQrCodeEventActivity.getContext(),MainActivity.class);
            intent.putExtra("startInstallUpdateApk",true);
            PendingIntent pendingIntent = PendingIntent.getbroadcast(
                    SelfUpdateByScanQrCodeEventActivity.getContext().getApplicationContext(),createRestartAgentAlarmManagerRequestCode,intent,PendingIntent.FLAG_UPDATE_CURRENT);
            AlarmManager alarmManager = (AlarmManager) SelfUpdateByScanQrCodeEventActivity.getContext().getSystemService(ALARM_SERVICE);
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND,delaySecTimetoRestartAgent);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pendingIntent);
                
            }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                alarmManager.setExact(AlarmManager.RTC_WAKEUP,pendingIntent);
               
            } else {
                alarmManager.set(AlarmManager.RTC_WAKEUP,pendingIntent);
                
            }

MainActivity的代码

public class MainActivity extends Activity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        // Todo Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_preparation);
        Bundle extras = this.getIntent().getExtras();
        boolean startInstallUpdateApk = extras.getBoolean("startInstallUpdateApk");
}
}

我可以在调用 MainActivity 后获取密钥、startInstallUpdateApk 和 onCreate 吗?

解决方法

简单回答您的问题

我可以在调用 onCreate 后获取密钥 "startInstallUpdateApk",MainActivity 吗?

是“是”。不过……

您的代码在应该调用 PendingIntent.getBroadcast() 的时候却调用了 PendingIntent.getActivity()。当警报触发时,现在什么都不会发生,因为 Activity Intent 和广播 Intent 是两种完全不同的事物。