我无法重启PendingIntent启动的一项活动。
“无法重启”意味着什么,例如,当关于已经运行的活动的startActivity()时, onCreate 或 onNewIntent 从未调用
名为MainActivity的活动我无法重启 singleTop 并覆盖 onNewIntent 。
这里显示了MainActivity。
<activity
android:name="com.example.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
首先,MainActivity通过pendingintent的通知启动。
我的PendingIntent是
Intent iS = new Intent(this,MainActivity.class);
iS.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendindIntent pi = PendingIntent.getActivity(this, 0, iS, PendingIntent.FLAG_UPDATE_CURRENT);
MainActivity执行startService()
,服务执行sendBroadcast()
,
并且BroadcastClass执行startActivity(Intent(this,MainActivity.class))
这是BroadcastClass。
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
然后onNewIntent是......永远不会被称为onCreate。
但是当在homeScreen上按下图标启动程序时,MainActivity中的onNewIntent会被同一个流调用。
抱歉我的英语不好。 如果你不介意的话,请告诉我修改的句子。编辑: onNewIntent就在这里。
protected void onNewIntent(Intent intent) {
Log.d("onNewIntent","onNewIntent");
String SOMETHING = intent.getStringExtra("SOMETHING");
LinearLayout ll = (LinearLayout)findViewById(R.id.ll2);
ll.removeAllViews();
TextView textview1 = (TextView)getLayoutInflater().inflate(R.layout.textview, null);
textview1.setText(SOMETHING);
ll.addView(textview1);
}
“onNewIntent”未出现在LogCat上。
答案 0 :(得分:1)
这是bug in Android。另见this。
问题是Android中决定是否调用onNewIntent()
的代码正在使用Intent
中的标志而不检查清单中的标志。
您应该可以通过在从广播接收器启动活动时添加Intent.FLAG_ACTIVITY_SINGLE_TOP
来解决此问题,如下所示:
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(i);
}
如果您在Google代码上标注并评论问题,也会有所帮助。如果我们制造足够的噪音,这可能会在2020年之前得到修复; - )
答案 1 :(得分:0)
就我而言,我仅在重新启动后遇到了此问题。知道为什么会很棒。
为了使我的PendingIntent
重新启动后正常工作,我在Intent
本身上添加了以下标志:
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
PendingIntent.FLAG_CANCEL_CURRENT
和PendingIntent
。这种行为很奇怪,因为待处理的意图在设备重新启动之前不会有任何问题。