Dav*_*ato 55 notifications android
我正在尝试从Android docs说明的通知中启动活动,但是当我打开通知然后按后退按钮时,HomeActivity(父级)不会打开,而是应用程序关闭.我究竟做错了什么?
Intent resultIntent = new Intent(context, MatchActivity.class);;
resultIntent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(resultIntent);
Run Code Online (Sandbox Code Playgroud)
Ral*_*gha 93
您需要为要启动的活动添加父堆栈,而不是其父项.
更换:
stackBuilder.addParentStack(MainActivity.class);
Run Code Online (Sandbox Code Playgroud)
有:
stackBuilder.addParentStack( MatchActivity.class );
Run Code Online (Sandbox Code Playgroud)
这假设您已在Manifest(API 16+)中定义了父级:
<activity android:name=".MatchActivity"
android:parentActivityName=".MainActivity"
... />
Run Code Online (Sandbox Code Playgroud)
如果您正在使用API 16进行开发,那么您必须将父级定义为:
<activity android:name=".MatchActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
Run Code Online (Sandbox Code Playgroud)
pen*_*Dev 68
如果没有一个解决方案正在运行,并且您确定已经仔细地遵循了所有内容......那么您需要卸载该应用并重新安装它.为我工作!
Raf*_*ael 10
Intent resultIntent = new Intent(App.getContext(), TargetActivity.class);
Intent backIntent = new Intent(App.getContext(), ParentActivity.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
final PendingIntent resultPendingIntent = PendingIntent.getActivities(
App.getContext(), 0,
new Intent[]{backIntent, resultIntent}, PendingIntent.FLAG_ONE_SHOT);
mNotifyBuilder.setContentIntent(resultPendingIntent);
Run Code Online (Sandbox Code Playgroud)
这解决了Notification Click上父堆栈的问题
使用TaskStackBuilder并没有解决我的问题,只适用于Honeycomb和更高版本.所以我采取以下解决方案(请不要将我钉在十字架上):
MainActivity而不是MatchActivity传递MatchActivity作为参数(通过Intent).MainActivity.onCreate,启动MatchActivityif参数是否可用.新代码:
Intent resultIntent = new Intent(context, MainActivity.class) //
.putExtra(MainActivity.ACTIVITY_EXTRA, MatchActivity.class.getName()) //
.putExtra("Pass extras to MatchActivity", "if you want! :)");
PendingIntent pendingIntent = PendingIntent.getActivity(context, visitId, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context) //
.setContentIntent(pendingIntent) //
.build();
Run Code Online (Sandbox Code Playgroud)
上MainActivity:
public static final String ACTIVITY_EXTRA = "activity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getStringExtra(ACTIVITY_EXTRA) != null) {
startActivity(new Intent(getIntent()).setClassName(this, getIntent().getStringExtra(ACTIVITY_EXTRA)));
}
...
}
Run Code Online (Sandbox Code Playgroud)