Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 启动挂起的意图并返回已启动该意图的活动_Android_Android Intent_Android Activity_Android Pendingintent - Fatal编程技术网

Android 启动挂起的意图并返回已启动该意图的活动

Android 启动挂起的意图并返回已启动该意图的活动,android,android-intent,android-activity,android-pendingintent,Android,Android Intent,Android Activity,Android Pendingintent,我正在创建一个android应用程序,但我在这个场景中遇到了一个问题。。 我显示一个弹出窗口,这是一个有半透明背景的活动,它有一个允许在弹出窗口之间滑动的viewpager。 现在,当我点击这个弹出窗口时,我想启动一个PendingEvent(它不是由我创建的,而是由一个外部应用程序创建的。例如gMail提供的PendingEvent) 一切似乎都正常,但现在问题来了! 如果通过点击弹出窗口,我启动了一个外部活动,比如gMail,当我退出最后一个窗口时,我需要返回到包含其他弹出窗口的上一个活动,

我正在创建一个android应用程序,但我在这个场景中遇到了一个问题。。 我显示一个弹出窗口,这是一个有半透明背景的活动,它有一个允许在弹出窗口之间滑动的viewpager。 现在,当我点击这个弹出窗口时,我想启动一个PendingEvent(它不是由我创建的,而是由一个外部应用程序创建的。例如gMail提供的PendingEvent)

一切似乎都正常,但现在问题来了! 如果通过点击弹出窗口,我启动了一个外部活动,比如gMail,当我退出最后一个窗口时,我需要返回到包含其他弹出窗口的上一个活动,这个有时会发生,但并不总是发生!这对我来说至关重要,因为我已经为清单文件中带有标记的弹出窗口设置了活动,因此如果我无法返回到该活动,我将无法处理其他挂起的弹出窗口

显然,
android:excludeFromRecents=“true”
的使用对我来说也是至关重要的

我怎样才能找到这个问题的解决方案

以下是我如何从弹出窗口启动PendingEvent的示例:

setOnClickListener(new View.OnViewClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            //intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            if(blablabla){
                try{
                    pi.send(context,0,intent);
                }
                catch(Exception e){}
            }
        }
    });
谢谢大家

编辑

我的舱单:

<application
    android:allowBackup="true"
    android:icon="..."
    android:label="..."
    android:theme="..." >
    <activity
        android:name="...ActivityApp"
        android:label="..."
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service
        android:name="...NotificationListener"
        android:label="..."
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>
    <!-- the activity below contains all the popups   -->
    <activity
        android:name="...Popup"
        android:excludeFromRecents="true"
        android:launchMode="singleInstance"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent">

    </activity>


</application>

您正在将
launchMode=“singleInstance”
用于您的
弹出窗口
活动。这意味着将只创建此活动的一个实例。当有2个通知时,您将调用
startActivity()
2次,但第二次它不会创建另一个
Popup
实例,它只会将
Popup
的现有实例带到前台,并在该实例上调用
onNewIntent()

此外,您还需要在
弹出窗口
的清单定义中指定
taskafinity=“
,因为此时
弹出窗口
活动与您的主活动具有相同的
taskafinity
,如果您的主活动已经在运行,这可能会导致问题。如果您确实需要一个
singleInstance
活动,则必须确保它不会与应用程序中的任何其他活动共享
taskAffinity

由于
Popup
是一个
singleInstance
活动,当它启动Gmail活动时,该活动将在新任务中启动(因为
singleInstance
阻止将任何其他活动启动到由
singleInstance
活动启动的任务中)。这可能是Gmail上的后退按钮无法返回应用程序的部分原因


正如我前面所说,恐怕您的体系结构存在缺陷,您应该重新考虑您的需求。

我不太理解您的问题。在我看来,你的架构有缺陷。如果启动外部应用程序,用户可以通过按下HOME(主页)按钮或通过拉下通知栏转到另一个应用程序来离开该应用程序。不能保证它会“返回”到您的应用程序中。如果您故意阻止您的应用程序显示在最近的任务列表中,则无法返回。也许你应该解释一下你到底想做什么。我想做的是创建一个应用程序,它本质上是一个监听新通知的服务,当新通知到达时,我截获了这个通知,并显示一个包含通知中信息的弹出窗口,以此类推。现在,如果我们认为有两个通知到达,我将显示两个弹出窗口。如果我单击一个弹出窗口,我将启动由其通知的PendingEvent描述的活动。此时,我应该按“后退”按钮返回我的活动,并单击另一个弹出窗口,但当我单击“后退”按钮时,我返回主页,而没有剩余的弹出窗口。另一个重要信息。我确信我的活动未被破坏,但处于暂停状态!我已经用Logcat检查过了。但是你不能假设用户会通过“退出”你启动的应用程序而回到你的活动中!他可能不可能仅仅靠后退就能做到这一点。Android应用程序并非都是这样工作的。我仍然认为你的架构有缺陷。不管怎样,发布你的清单,也许我能明白为什么你的应用程序没有重新出现。同时发布您的服务用于启动“弹出”活动的代码。感谢David的所有。。。代码在第一篇文章中(我已经编辑过了)!我希望你能帮助我!谢谢你的回答!在继续实施之前,我将更多地考虑我的体系结构。谢谢大家
@Override
public void onNotificationPosted(StatusBarNotification sbn){

    if(sbn.getPackageName().equalsIgnoreCase("com.google.android.gm")){  // GMAIL
            Log.d("GMAIL","ok");
            ...
            Intent gmailIntent = new Intent(getBaseContext(), Popup.class);
            gmailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            ...
            getBaseContext().startActivity(gmailIntent);
        }