意图服务启动后,防止更改应用程序演示Android的顺序

Jul*_*ira 6 android android-intent intentservice android-broadcast

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

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

服务

intentCodeRead.putExtra(BARCODE_TEXT, readStr);
intentCodeRead.putExtra(BARCODE_DATE, System.currentTimeMillis());
intentCodeRead.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendBroadcast(intentCodeRead);
Run Code Online (Sandbox Code Playgroud)

有任何建议的标志,以防止这种行为? 图1应用程序A调用应用程序B.

图2应用B用A改变上下文

编辑1

应用程序(A)(启动器应用程序)中,我有intentService一个broadcast用于另一个应用程序.的应用(B)是听这个广播的应用程序.当(A)进行广播时,应用程序(B)然后收听.问题是(A)(A)做广播时带到(B)的前面.如何在不更改应用程序演示顺序的情况下进行更改?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);
Run Code Online (Sandbox Code Playgroud)

initservice.java

Intent intentService = new Intent(context, BarcodeScannerService.class);
context.startService(intentService);
Run Code Online (Sandbox Code Playgroud)

申请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();
                    }
                }

            }
Run Code Online (Sandbox Code Playgroud)

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

Jul*_*ira 2

我针对此问题的解决方法是使用ActivityManager将活动发送到后台的应用程序置于前台broadcast。使用了以下代码并改编自Android,如何将Task带到前台?

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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