[英]SingleTop launchMode fails when app is opened from notification or external Intent
我有这个最小化的应用程序:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
}
}
活动B.java
public class ActivityB extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
}
}
AndroidManifest.xml
<activity
android:name=".activities.MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
<data android:mimeType="audio/*" />
</intent-filter>
</activity>
<activity
android:name=".activities.ActivityB"
android:exported="false"
android:parentActivityName=".activities.MainActivity"
android:theme="@style/AppTheme.NoActionBar">
</activity>
1)我使用 TaskStackBuilder 在应用程序关闭(终止)的情况下从服务启动通知,以打开堆栈中的 MainActivity -> ActivityB 就像文档所说的那样( https://developer.android.com/training/notify-user/navigation ) :
Intent resultIntent = new Intent(this, ActivityB.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntentWithParentStack(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
...
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "1")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Title")
.setContentText("Message")
.setAutoCancel(true)
.setContentIntent(resultPendingIntent);
android.app.Notification buildNotification = mBuilder.build();
NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotifyMgr.notify(1, buildNotification);
ActivityB 在通知单击时打开,但使用后退按钮不会 go 到父 Activity (MainActivity),这正是您想要的 TaskStackBuilder。 它使应用程序关闭。
2)当打开 MainActivity 的应用程序处于后台(主页按钮)时,如果我从另一个应用程序向该应用程序共享音频文件,则始终调用 onCreate 而不是 onNewIntent。 查看 launchMode 的文档,它不应该调用 onNewIntent 因为 MainActivity 是 singleTop 并且位于堆栈的顶部吗?
测试于
尝试 singleInstance,似乎还有另一个堆栈打开,否则系统确实会调用 onNewIntent 而不是 onCreate。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.