防止在意向服务启动后更改应用程序呈现顺序 Android

Prevent change of order of application presentation Android after intent service launch

我遇到以下情况:一个主要应用程序是启动器应用程序 (A)应用程序始终是 运行,并且此应用程序调用另一个 子应用程序 (B) 图 1 。当应用程序 (A) 启动 intent service 并且应用程序 (B) 使用此意图(图 2)时会出现问题。

这是用于启动 Intent 服务的代码:

服务

intentCodeRead.putExtra(BARCODE_TEXT, readStr);
intentCodeRead.putExtra(BARCODE_DATE, System.currentTimeMillis());
intentCodeRead.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendBroadcast(intentCodeRead);

有没有关于防止这种行为的标志的建议?

编辑 1

应用程序 (A)(启动器应用程序)中,我有一个 intentService 对另一个应用程序进行了 broadcast应用程序 (B) 是监听此广播的应用程序。当 (A) 广播 应用程序时 (B) 然后收听。问题是当 (A) 带到 (B) 前面时 (A) 这样做播送。如何在不更改应用程序呈现顺序的情况下制作 broadcast

编辑 2

应用程序 A

BarcodeScannerService.java

intentCodeRead.putExtra(Constants.BARCODE_TEXT, readStr);
intentCodeRead.putExtra(Constants.BARCODE_DATE, System.currentTimeMillis());
intentCodeRead.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);               
sendBroadcast(intentCodeRead);

initservice.java

Intent intentService = new Intent(context, BarcodeScannerService.class);
context.startService(intentService);

申请B

receive.java

BroadcastReceiver actionBarcodeScannerAndPresenceReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
            /*  Receiver for the barcode scan and presence sensor events    */

                if (intent.getAction().equals(Constants.ACTION_PRESENCE)) {
                    try
                    {
                        Log.e("Sensor Presenca","Detectada");
                    }
                    catch (Exception e) {
                        Toast.makeText(getApplicationContext(), "Ocorreu um erro no sensor de presença", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }
                } else if (intent.getAction().equals(Constants.ACTION_ON_BARCODE)) {
                    try {
                        String scannedText = intent.getStringExtra(Constants.BARCODE_TEXT);

                        if(scannedText.equals("0123456789"))
                        {
                            barcodeResult.setText(scannedText);
                            barcodeResult.setTextColor(getResources().getColor(R.color.green));
                            //Thread.sleep(5000);
                            ReturnResult("BARCODE", 0);
                        }else{
                            barcodeResult.setText(scannedText);
                            barcodeResult.setTextColor(getResources().getColor(R.color.red));
                           //Thread.sleep(5000);
                            ReturnResult("BARCODE", 1);
                        }

                    }
                    catch (Exception e){
                        Toast.makeText(getApplicationContext(), "Ocorreu um erro ao ler o código de barras!", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }
                }

            }

此代码有效 well.The 唯一的问题是,总是在 (A) 向应用程序 (A) 发送 broadcast 消息时 带到 (B) 前面。防止这种情况的标志或方法是什么?

我解决此问题的方法是使用 ActivityManagerbroadcast activity 发送到后台的应用程序置于最前面。使用了以下代码并改编自 Android, how to bring a Task to the foreground?

ActivityManager am  = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<ActivityManager.RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

for (int i = 0; i < recentTasks.size(); i++)
{
    if (!recentTasks.get(i).baseActivity.toShortString().contains("your_class_to_be_avoid")) {
        activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
    }
}

在这段代码中,我将与我的主应用程序不同的每个应用程序发送到前台。