Android App问题将正确的主要活动带到了前面

时间:2014-10-09 05:56:52

标签: android

在我的项目中,我试图在应用程序完成后将我的应用程序置于前面(用户按下后退按钮)。但它只给了我最后一个打开的应用程序。因此,如果我在同一时间使用其他应用程序,它将打开此应用程序,而不是我的应用程序。也许有人可以帮助我 - 我尝试了许多与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”比我的应用程序应该出现,但它会打开环聊。

2 个答案:

答案 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();
    }
...
}