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)(启动器应用程序)中,我有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)的前面.什么是防止这种情况的标志或方法?
我针对此问题的解决方法是使用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)
在此代码中,我将与主应用程序不同的每个应用程序发送到前台。
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |