标签: taskstackbuilder

TaskStackBuilder过渡动画

我正在使用Android L过渡ActivityOptions在意图中传递一个包.如何以相同的意图重现动画TaskStackBuilder

这是我目前的单一工作方法Intent:

startActivity(myIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
Run Code Online (Sandbox Code Playgroud)

这是我的尝试TaskStackBuilder:

 TaskStackBuilder builder = TaskStackBuilder.create(this);
 builder.addNextIntentWithParentStack(myIntent);
 builder.startActivities(ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
Run Code Online (Sandbox Code Playgroud)

但动画创造了一种奇怪的效果,而不是"单一意图"版本.

我也尝试过:

builder.addNextIntent(myIntent);
Run Code Online (Sandbox Code Playgroud)

代替:

builder.addNextIntentWithParentStack(myIntent);
Run Code Online (Sandbox Code Playgroud)

animation android android-intent taskstackbuilder

47
推荐指数
1
解决办法
1001
查看次数

为什么我们使用TaskStackBuilder?

为什么我们TaskStackBuilder在创建通知时使用?我没有得到它背后的逻辑.

有人可以解释一下.

public void showText(final String text){
    Intent intent = new Intent (this, MainActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(intent);
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new Notification.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(getString(R.string.app_name))
            .setAutoCancel(true)
            .setPriority(Notification.PRIORITY_MAX)
            .setDefaults(Notification.DEFAULT_VIBRATE)
            .setContentIntent(pendingIntent)
            .setContentText(text)
            .build();
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICACTION_ID, notification);
}
Run Code Online (Sandbox Code Playgroud)

android android-notifications taskstackbuilder

29
推荐指数
3
解决办法
1万
查看次数

Android TaskStackBuilder startActivities会在Samsung Galaxy S3上打开白屏并冻结

在某些手机上尝试使用该startActivities()方法尝试启动活动时遇到问题TaskStackBuilder(特别是三星Galaxy S3 - Android 4.3,三星Galaxy S3 Neo - Android 4.4.2)

以下是使用的代码段:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(ConfirmAddressActivity.this);
stackBuilder.addParentStack(AddressesActivity.class);

Intent intent = AddressesActivity.createStartingIntent(
    ConfirmAddressActivity.this,
    true, Collections.EMPTY_LIST
);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

stackBuilder.addNextIntent(intent);
stackBuilder.startActivities();
Run Code Online (Sandbox Code Playgroud)

有缺陷的行为是,在执行stackBuilder.startActivities()它之后打开一个白色屏幕并保持冻结而不打开AddressesActivity.这不是一种常规行为,有时会发生.

正常行为是,执行后stackBuilder.startActivities()打开白屏(0.5秒 - 1秒)然后打开AddressesActivity,同时正确构建该活动的完整后栈.这是许多设备/平台下的正确行为.(HTC M9 Android 6.0,三星S2 - Android 4.1.2,三星Galaxy S6 - Android 5.1.1,LG G4 - Android 5.1.1)

这是定义活动的android清单片段:

<activity
    android:name=".activity.account.AccountActivity"
    android:label="My account"
    android:screenOrientation="portrait"
    android:parentActivityName=".activity.DashboardActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".activity.DashboardActivity" />
</activity>

<activity
    android:name=".activity.addresses.AddressesActivity"
    android:label="My addresses"
    android:screenOrientation="portrait"
    android:parentActivityName=".activity.account.AccountActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activity.account.AccountActivity" …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-navigation taskstackbuilder

15
推荐指数
0
解决办法
467
查看次数

我正在构建通知时,TaskStackBuilder.addParentStack无法正常工作

我做了一切,正如官方文档所写.但是当我向后导航时,MainActivity(父)不会打开.相反,应用程序关闭.

这是我的代码:

Intent resultIntent = new Intent(context, TestActivity.class);

TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(TestActivity.class);
stackBuilder.addNextIntent(resultIntent);
Run Code Online (Sandbox Code Playgroud)

清单如下:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".TestActivity"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".Main2Activity" />
    </activity>
Run Code Online (Sandbox Code Playgroud)

谢谢.

notifications android taskstackbuilder

11
推荐指数
0
解决办法
1982
查看次数

TaskStackBuilder #startActivities()NullPointerException

我在4.4.2和4.4.3设备上发生了崩溃(虽然我不确定这是一个API问题),但在某些情况下ParsePushBroadcastReceiver,以下代码会导致调用NullPointerException内部某处startActivities.

Intent intent = new Intent(context, SomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TaskStackBuilder.create(context)
            .addParentStack(SomeActivity.class)
            .addNextIntent(intent)
            .startActivities();
Run Code Online (Sandbox Code Playgroud)

我已经尝试过测试以查看上下文是否为null,但是,Intent实例化会抓住它.值得注意的是,此应用程序正在使用Parse Push.此崩溃的崩溃日志:

java.lang.RuntimeException: Unable to start receiver com.example.app.android.receiver.PushReceiver: java.lang.NullPointerException
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2567)
       at android.app.ActivityThread.access$1800(ActivityThread.java:161)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:157)
       at android.app.ActivityThread.main(ActivityThread.java:5356)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.NullPointerException
       at android.os.Parcel.readException(Parcel.java:1471)
       at android.os.Parcel.readException(Parcel.java:1419)
       at android.app.ActivityManagerProxy.startActivities(ActivityManagerNative.java:4494)
       at android.app.Instrumentation.execStartActivitiesAsUser(Instrumentation.java:1496)
       at android.app.Instrumentation.execStartActivities(Instrumentation.java:1458)
       at android.app.ContextImpl.startActivities(ContextImpl.java:1465)
       at android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
       at android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
       at android.support.v4.content.ContextCompatJellybean.startActivities(ContextCompatJellybean.java:26)
       at android.support.v4.content.ContextCompat.startActivities(ContextCompat.java:105)
       at android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:325)
       at android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:301)
       at com.example.app.android.receiver.PushReceiver.routePush(PushReceiver.java:59) …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-intent taskstackbuilder

9
推荐指数
1
解决办法
1597
查看次数

带有startActivityForResult的TaskStackBuilder

在我的例子中,我有一个活动A,它使用startActivityForResult调用活动B.

活动B是将数据返回到活动A的表单,因此数据可以存储在我的数据库中.

此外,我的应用程序启动通知,单击时启动活动B,当我尝试从活动B返回到活动A时出现问题,因为从未调用方法"onActivityResult".在创建TaskStackBuilder时,我无法模拟startActivityForResult():

Intent resultIntent = new Intent(this, activityB.class);
// This ensures that navigating backward from the Activity leads out of your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(activityB.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                .setContentIntent(resultPendingIntent);
Run Code Online (Sandbox Code Playgroud)

最后,我在manifest.xml中添加了活动B的父活动:

<activity
    android:name=".activityB"
    android:parentActivityName=".activityA"
    android:windowSoftInputMode="stateHidden">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".activityA"/>
</activity>
Run Code Online (Sandbox Code Playgroud)

android taskstackbuilder

6
推荐指数
1
解决办法
818
查看次数

Using TaskStackBuilder in notification recreates an activity

当活动中发生某些事件时,我会向用户显示一条通知。创建通知时,如果系统清除了我的活动,我会使用 TaskStackBuilder 确保我有后退堆栈活动列表。我的代码看起来像这样:

    ...
    TaskStackBuilder builder = TaskStackBuilder.create(sContext);
    builder.addNextIntent(new Intent(context, ActivityA));
    builder.addNextIntent(new Intent(context, ActivityB));
    builder.addNextIntent(new Intent(context, ActivityC));
    PendingIntent pendingIntent = 
            builder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)

    Notification.Builder builder = new Notification.Builder(context)
            .setContentTitle(title))
            .setContentText(notificationText)
            .setSmallIcon(getNotificationIcon())
            .setContentIntent(pendingIntent);

    builder.build();
    ...
Run Code Online (Sandbox Code Playgroud)

因此,打开的活动将是最后添加的,即 ActivityC(我不希望重新创建它)。我找到的一个解决方案是:如何使通知恢复而不是重新创建活动? 据说我不应该使用TaskStackBuilder,但这不是我想要的。我想使用 TaskStackBuilder 从通知启动一个活动,而不是重新创建整个活动。

有什么解决方案/建议吗?

notifications android android-activity android-pendingintent taskstackbuilder

5
推荐指数
1
解决办法
1955
查看次数

Android TaskStackBuilder 丑陋的过渡

TaskStackBuilder 到底有什么问题,它在开始新活动时使用了这种丑陋的过渡。:

    TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this)
            .addParentStack(ActivityB.class)
            .addNextIntent(new Intent(this, ActivityB.class));
    taskStackBuilder.startActivities();
Run Code Online (Sandbox Code Playgroud)

这基本上是 google 的标准代码,但是如果您运行此代码,您将在转到 ActivityB 时看到一个超级丑陋的过渡。

我猜是因为它是一个新任务。但我不希望它看起来像这样,我有什么可以做的吗?

谢谢 !

android taskstackbuilder

5
推荐指数
1
解决办法
234
查看次数

从现有任务中的通知启动新活动

我的应用程序接收推送并根据推送类型打开不同的活动。

我使用TaskStackBuilder待处理的 Intent 来在我的清单中结合创建一个合成后堆栈android:parentActivityName

到目前为止,一切都很简单。当应用程序未启动时,一切按预期工作。但是,如果应用程序位于后台(任务正在运行),待处理的 Intent 还会使用清单中定义的父级启动我所需的活动,但会重置现有任务。问题是用户同时启动的其他活动也会被清除。 在此输入图像描述

所以想要实现的是:

  1. 如果应用程序未启动,请使用合成后台堆栈(MainActivity)打开所需的活动
  2. 如果应用程序正在运行,请尊重当前的任务顺序,并将所需的活动推到其之上。

我似乎无法让它与TaskStackBuilder.

我很乐意获得一些见解。

android android-intent android-notifications android-pendingintent taskstackbuilder

4
推荐指数
1
解决办法
2215
查看次数

无法为活动创建后台堆栈

我收到一个通知,我想创建一个自定义的Back Stack,以便用户可以浏览它。但是到目前为止,单击通知会打开所需的活动,但是当我按下Back按钮时,它会完全退出该应用程序。

Intent resultIntent = new Intent(this, NotifViewActivity.class);
    resultIntent.putExtra(StringHolder.NOTIFICATION_ID, notif.getId());

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(HomeActivity.class);
    stackBuilder.addParentStack(NotifActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder notificationCompat = new NotificationCompat.Builder(context)
            .setAutoCancel(true)
            .setContentTitle(notif.getTitle())
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(resultPendingIntent);
Run Code Online (Sandbox Code Playgroud)

清单文件

<activity
        android:name=".NotifActivity"
        android:parentActivityName=".HomeActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".HomeActivity" />
    </activity>
    <activity
        android:name=".NotifViewActivity"
        android:parentActivityName=".NotifActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".NotifActivity" />
    </activity>
Run Code Online (Sandbox Code Playgroud)

我希望它的工作方式是,在单击通知时,将用户转到 NotifViewActivity,然后在按下后退按钮时,将用户转到NotifActivity;当再次按下后退按钮时,将用户 转到 HomeActivity。正在尝试创建,我该怎么做?

android android-intent android-notifications android-pendingintent taskstackbuilder

2
推荐指数
1
解决办法
659
查看次数