我的应用程序在后台运行,我希望在下面的代码运行时,应用程序显示在Android手机的顶部(已启动)。 (我知道代码是肯定运行的)
这看起来很简单,但我在这个网站上花了几个小时,每个人似乎都在暗示这样的事情:
Intent intent = new Intent(myActivity.this, myActivity.class);
startActivity(intent);
但是,它并没有将应用程序带到前面并启动它。
我从通知发起的PendingIntent开始工作。我通过以下代码完成了这项工作。但我希望应用程序能够在用户没有点击通知的情况下自行启动。
Intent intent = new Intent(myActivity.this, myActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, REQUEST_CODE, intent, 0);
notification.setLatestEventInfo(this, "title", "msg", contentIntent);
我也尝试过:
Intent intent = new Intent("android.intent.action.MAIN");
startActivity(intent);
并标记意图:
intent.setFlags(Intent.FLAG_FROM_BACKGROUND);
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
但似乎没有做任何事情,任何帮助表示赞赏。
答案 0 :(得分:5)
您应该能够像这样调用自己的应用程序:
Intent intent = new Intent("android.intent.category.LAUNCHER");
intent.setClassName("com.your.package", "com.your.package.MainActivity");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
编辑:忘记添加intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
答案 1 :(得分:0)
根据我的理解,您需要在后台运行的服务,并且在特定事件中,您希望应用程序的活动在前面,即在用户当前屏幕上,无论他在做什么。不建议让后台服务在没有用户操作的情况下启动应用程序。 Android开发者网站说
状态栏通知应该用于a的任何情况 后台服务需要提醒用户有关该事件的信息 需要回应。 后台服务永远不应该启动 活动本身就是为了接收用户的互动。服务 应该创建一个状态栏通知,将启动 活动由用户选择。
因此,不要试图让它自己发布。
答案 2 :(得分:0)
我不是在我的笔记本电脑之后,所以我确定,但我认为你必须通过一个上下文对象手然后做context.startactivity(意图);
很抱歉我没有参加我的电话大会
希望有所帮助
答案 3 :(得分:0)
我抓着稻草,但你写道:
首先启动MyActivity,然后我导航到另一个应用程序或者只是点击主屏幕让我的应用程序在后台运行。
所以情况是你的原始Activity没有在后台运行,当你按下HOME时它很可能已被停止和销毁。您的后台任务仍然是孤儿,此时 MyActivity.this null 。
尝试并测试 Log.i(TAG,MyActivity.this); 打印到LogCat中的内容。
答案 4 :(得分:0)
我最终使用了未决的意图,而不是直接尝试使用意图。 这样的事情:似乎更简单。
Intent.send(this, 0, intent);
感谢。
答案 5 :(得分:0)
此外,自compileSdkVersion 29起,我已经看到这是不可能的,除非有一些限制:
finish()
。https://developer.android.com/guide/components/activities/background-starts