防止在意向服务启动后更改应用程序呈现顺序 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) 前面。防止这种情况的标志或方法是什么?
我解决此问题的方法是使用 ActivityManager
将 broadcast
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);
}
}
在这段代码中,我将与我的主应用程序不同的每个应用程序发送到前台。
我遇到以下情况:一个主要应用程序是启动器应用程序 (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) 前面。防止这种情况的标志或方法是什么?
我解决此问题的方法是使用 ActivityManager
将 broadcast
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);
}
}
在这段代码中,我将与我的主应用程序不同的每个应用程序发送到前台。