相关疑难解决方法(0)

如何使用不同的意图启动活动时,如何防止活动的多个实例

当我使用Android市场上的"打开"按钮启动时,我在应用程序中遇到了一个错误.似乎从市场上推出它会使用不同的意图,然后从手机的应用程序菜单中启动它.这导致启动相同活动的多个副本,这些副本彼此冲突.

例如,如果我的应用程序包含ABC活动,则上述问题可能会导致堆栈ABCA.

我尝试使用Intent所有活动来解决这个问题,但每当我点击HOME时,它都会产生不必要的副作用,即将活动堆栈清除为root.

示例: ABC - > HOME - > A当我需要的是ABC - > HOME - > ABC

在使用HOME时,是否有一种防止启动相同类型的多个活动而不重置根活动的好方法?

android activity-stack google-play back-stack

116
推荐指数
3
解决办法
7万
查看次数

点击通知进入当前活动

我正在使用这个解决方案:如何使通知意图恢复而不是制定新的意图?

当我正常运行我的应用程序时工作正常..但我的应用程序有共享功能.

当我选择要从图库应用程序共享的图像并在我的活动中打开它时,我在活动中创建通知.我希望当用户点击通知时,它会打开现有活动(由图库应用打开)

问题是,当我点击通知时,它不会恢复该活动,而是打开活动的新实例或之前已打开的另一个实例

编辑:更多解释

我的应用程序名为ShareApp,活动名为ShareActivity,问题是当我通过图库应用程序打开ShareActivity时,会在图库应用程序任务的堆栈顶部创建一个ShareActivity实例.现在,当我创建指向我的ShareActivity的通知时,我使用了intent:

Intent intent = new Intent(this, ShareActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)

问题是,当我点击通知时,它指向ShareApp任务的堆栈中的ShareActivity实例,而不是gallery app任务的堆栈.

任何想法如何指向正确的任务的堆栈?

编辑2:我的代码

        int defaults = Notification.FLAG_NO_CLEAR;
        NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setContentTitle(getString(R.string.app_name))
                        .setContentText(text)
                        .setDefaults(defaults);
        Intent intent = new Intent(this, this.getClass());
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        mBuilder.setContentIntent(pendingIntent);
        NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(_ID, mBuilder.build());
Run Code Online (Sandbox Code Playgroud)

编辑3:adb shell dumpsys活动(在应用David代码之后/sf/answers/1183112241/)

我的应用程序名为shareApp,我的活动是ShareActivity

在点击通知之前:

Main stack:
    TaskRecord{41965708 #6 A com.android.gallery3d}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.gallery3d/.app.Gallery bnds=[364,50][108,108]}
      Hist #2: ActivityRecord{417ccc28 com.yeahman.shareapp/.ShareActivity}
        Intent …
Run Code Online (Sandbox Code Playgroud)

notifications android

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

使用标志 FLAG_ACTIVITY_NEW_TASK 启动活动,新活动不在新任务中

首先,我开始ActivityFLAG_ACTIVITY_NEW_TASK,然后使用命令“亚行外壳dumpsys Activity”,最后我发现在一个任务中的两项活动?

 Intent intent = new Intent(this, Main2Activity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

这些Activity是正常的,我没有修改它们?这些是堆栈信息。

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):
  Stack #1:
  mFullscreen=true
  mBounds=null
    Task id #2493
    mFullscreen=true
    mBounds=null
    mMinWidth=-1
    mMinHeight=-1
    mLastNonFullscreenBounds=null
    * TaskRecord{cb64df8 #2493 A=com.example.flag U=0 StackId=1 sz=2}
      userId=0 effectiveUid=u0a63 mCallingUid=2000 mUserSetupComplete=true mCallingPackage=null
      affinity=com.example.flag
      intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.flag/.MainActivity}
      realActivity=com.example.flag/.MainActivity
      autoRemoveRecents=false isPersistable=true numFullscreen=2 taskType=0 mTaskToReturnTo=1
      rootWasReset=false mNeverRelinquishIdentity=true mReuseTask=false mLockTaskAuth=LOCK_TASK_AUTH_PINNABLE
      Activities=[ActivityRecord{b786d24 u0 com.example.flag/.MainActivity t2493}, ActivityRecord{afe6f61 u0 com.example.flag/.Main2Activity t2493}]
      askedCompatMode=false inRecents=true …
Run Code Online (Sandbox Code Playgroud)

android

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

Android 深层链接在我链接的应用程序中打开,而不是启动我的应用程序的单独实例

我正在使用本机反应。深度链接非常适合 ios。但是,对于 Android,我似乎无法弄清楚如何从深层链接正确打开我的应用程序。

从 Firefox 打开深层链接时,我的应用程序在 Firefox 窗口内启动。当我使用深层链接测试器应用程序时也是如此。除了不是从正确的应用程序启动之外,一切都按预期与应用程序一起工作。

我究竟做错了什么?这是我的 AndroidManifest.xml 的摘录:

    <activity 
         android:name=".MainActivity"
         android:label="@string/app_name"
         android:configChanges=
             "keyboard|keyboardHidden|orientation|screenSize" 
         android:windowSoftInputMode="adjustResize"  
         android:exported="true">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="myapp" />
      </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

android deep-linking react-native

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