我想Android不会让人们这样做,因为他们认为他们有完美的任务/应用程序处理.但是,在我的情况下,我真的需要这样做.
我有一个活动A作为我的申请的入口点.在该活动中,它读取偏好并决定开始哪个活动,比如B或C.之后,它完成自己.因此,活动A永远不会出现在用户身上.
我的应用程序将东西存储在SD卡上,并不断读取它.因此,当卸载SD卡时,我需要向用户显示sdcard不可用的消息,而不是打开B或C.我在A中设置一个检查以在sdcard不可用时显示该消息.显示该消息时,A不会尝试启动B或C.
如果用户只从应用程序启动器输入我的应用程序,事情就会完美.但是,我发现用户也可以通过长按home进入我的应用程序并从最近的应用程序列表中选择它,如果他最近打开它.当用户这样做时,它跳过A并直接转到B或C.我没有检查它们,因此在我尝试访问sdcard时抛出异常,并弹出强制关闭对话框.
我可以简单地将支票移到B和C来解决这个问题.但是在未来,从A开始的活动数量将会增加.如果有6个,我需要将此支票复制到6个地方.毋庸置疑,这看起来非常难看,而且是一场维护噩梦.
因此,最好的解决方案应该是在卸载SD卡时从最近的应用程序列表中删除我的应用程序.但是,我找不到如何做到这一点.即使终止进程或使用ActivityManager.restartPackage,它仍会出现在列表中.谁能告诉我如何从列表中删除它?
我有一个A> B> C的任务堆栈.我目前在C上,然后我按下主页按钮.我收到通知,意图将我带到活动A.我按下通知,我在A但是如果我按回去,我会转到C,然后是B,然后是A.
我正在设置我的PendingIntent.有什么明显错误吗?
final Intent notificationIntent = new Intent(mContext, ActivityA.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(myContext, 0, notificationIntent, 0);
Run Code Online (Sandbox Code Playgroud)
编辑1:
我在这里尝试了这个建议:清除任务中的所有活动?
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的结果.我的活动A在我的应用程序任务堆栈中开始,我按回去C,然后是B,然后是A.
我开始认为这在Android中是不可能的,或者在使用挂起的意图时是不可能的.
编辑2: 这不是需要什么标志的问题.更多的问题可能是错误的,标志似乎没有任何影响.
android android-intent android-notifications android-pendingintent
我正在尝试实现一个按钮,这将导致我的应用程序返回到第一个活动,并表现得好像它(几乎)重新开始.这段代码
Intent newIntent =
new Intent(currentActivity.getApplicationContext(), StartActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_CLEAR_TASK);
currentActivity.startActivity(newIntent);
Run Code Online (Sandbox Code Playgroud)
对于运行Android 4.1的较新平板电脑似乎工作正常,但它不适用于运行Android 2.3.4的旧设备.
我发现了几个关于此的线索:
Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK无法使用Android
阅读细则让我相信我应该使用android-support-v4.jar中的IntentCompat类,http://developer.android.com/reference/android/support/v4/content/IntentCompat.html
不幸的是,文档中没有任何示例,我不确定如何使用IntentCompat.我发现的唯一例子是:不用android 2.3启动MainActivity
这让我相信我应该这样做:
Intent newIntent = IntentCompat.makeRestartActivityTask(cn);
Run Code Online (Sandbox Code Playgroud)
但是这给了我一个编译器错误,说"makeRestartActivityTask"是一个未定义的符号.
我猜这意味着我没有正确地将android-support-v4.jar添加到我的构建环境(IntelliJ IDEA 12社区版),但我尝试过几种不同的方式,但它仍然不起作用.
所以我有两个问题:
我尝试使用IntentCompat看起来是否正确?
如何让编译器停止说"makeRestartActivityTask"是一个未定义的符号?
由于一个复杂的原因,我需要能够在用户按下HOME按钮时完成()我的活动.
这里的故事是我有一个主屏幕小部件,它启动了我的应用程序的不同部分,它具有完全透明的活动(因此即使我的活动正在运行,主屏幕仍会显示).如果先前的活动通过"主页"按钮终止,则它们将被带到前台并遮盖主屏幕.
或者作为替代方案,我可以以某种方式强制完成()之前的活动吗?
情况
活动A - >活动B - >活动C.
当活动C开始时,我希望C成为根活动,而A和B完成.
我怎样才能做到这一点?
UDPATE
我在10级,所以我不能使用适用于11级和更高级别的CLEAR_TASK标志.强文