在我的项目中,我试图在应用程序完成后将我的应用程序置于前面(用户按下后退按钮)。但它只给了我最后一个打开的应用程序。因此,如果我在同一时间使用其他应用程序,它将打开此应用程序,而不是我的应用程序。也许有人可以帮助我 - 我尝试了许多与Flags的不同组合,但它没有用。此外,如果显示器被锁定,我没有找到解决方案来恢复我的应用程序 - 也许某人有一个很好的解决方案或者可以给我建议。 感谢
public class IncomingBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyActivity myActivity = (MyActivity) context;
myActivity.doWork();
}
public class MyActivity extends Activity {
private boolean appInBackground = false;
...
@Override
public void onStop() {
appInBackground = true;
super.onStop();
}
@Override
public void finish() {
if (exitPressed) {
super.finish();
} else {
appInBackground = true;
moveTaskToBack(false);
}
}
public void doWork() {
// bring app to foreground
if (appInBackground) {
Intent intent1 = new Intent(getBaseContext(), MyActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent1);
}
....
}
}
Android Manifest launchMode:android:launchMode =“singleTask”
更新: 我使用我的应用程序来指示传入的SIP呼叫,我看了一下WalkieTalkieActivity的演示应用程序(https://android.googlesource.com/platform/development/+/master/samples/SipDemo)
// main Activity
@Override
public void onCreate(Bundle savedInstanceState) {
...
callReceiver = new IncomingBroadcastReceiver ();
this.registerReceiver(callReceiver, new IntentFilter(
"com.example.INCOMING"));
...
// me = SipProfile
Intent i = new Intent();
i.setAction("com.example.INCOMING");
PendingIntent pi = PendingIntent.getBroadcast(getBaseContext(), 0,
i, Intent.FILL_IN_DATA);
manager.open(me, pi, null);
}
实施例: 我的应用程序位于前台,我按下后退按钮将其取回。然后我打开另一个应用程序,例如环聊,而不是按主页按钮返回主屏幕。如果广播接收器收到的呼叫“INCOMING”比我的应用程序应该出现,但它会打开环聊。
答案 0 :(得分:0)
我的应用程序位于前台,我按下后退按钮
当您按下后退按钮时,当前活动实例将丢失。因此,appInBackground的值设置为
@Override
public void onStop() {
appInBackground = true;
super.onStop();
}
也输了。
所以下次收到广播并到达public void doWork()
时,appInBackground为空。
答案 1 :(得分:0)
现在我找到了一个解决方案:我应该在doWork()方法中使用pendingIntent并发送它。现在我的应用程序正在前面,即使它不是最后一个打开的应用程序。感谢提示,现在我必须努力将我的应用程序置于前面,如果启用了屏幕锁定。有什么想法吗?
public void doWork() {
// bring app to foreground
if (appInBackground) {
Intent intent1 = new Intent();
intent1.setClass(getBaseContext(),MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
pendingIntent.send();
}
...
}