У меня есть BroadcastReceiver
, настроенный для включения и выключения Bluetooth в соответствии с состоянием питания (при подключении Bluetooth включен, отключен, Bluetooth выключен). Это работает просто отлично (ууу!). однако, мое очень простое приложение имеет одну кнопку, которая также включает и выключает Bluetooth, и имеет текст «Bluetooth включен» или «Bluetooth выключен», в зависимости от обстоятельств. Я хотел бы обновить эту единственную кнопку, НО, я должен обновлять ее, только если приложение находится на переднем плане.
Внутри onResume на m, y основной активности я вызываю мой метод updateUI, который проверяет состояние Bluetooth и соответственно обновляет кнопку. однако это применимо только в том случае, если программа была открыта и работала в фоновом режиме и возобновляется, НЕ, если я нахожусь в программе во время подключения / отключения питания.
Я создал новое действие (CheckIfAppIsRunningActivity.java
) с этим кодом, который должен проверять, работает ли мое приложение на переднем плане, и, если это так, перевести его в действие (BluetoothOnActivity
), которое обновит кнопку:
package vermel.BluetoothOn;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class CheckIfAppIsRunningActivity extends Activity{
public void onCreate() {
checkStatus();
}
private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Intent it = new Intent();
it.setClassName("vermel.BluetoothOn", "vermel.BluetoothOn.BluetoothOnActivity");
context.startActivity(it);
}
};
public void checkStatus() {
ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningProcInfo = activityManager.getRunningAppProcesses();
for(int i = 0; i < runningProcInfo.size(); i++){
if(runningProcInfo.get(i).processName.equals("vermel.BluetoothOn")) {
if (runningProcInfo.get(i).lru == RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
//start activity
/* Intent it = new Intent();
it.setClassName("vermel.BluetoothOn", "vermel.BluetoothOn.BluetoothOnActivity");
context.startActivity(it); */
}
}
}
}
}
и я указываю на это с моего приемника вещания:
package vermel.BluetoothOn;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Button;
import android.widget.Toast;
public class BTDetector extends BroadcastReceiver {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
public void onReceive(Context context , Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_POWER_CONNECTED)) {
if (!mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.enable();
//TODO if app is open, change text on button to on
//Toast.makeText(context, "turned on bluetooth", Toast.LENGTH_LONG).show();
Intent i = new Intent();
i.setClassName("vermel.BluetoothOn", "vermel.BluetoothOn.CheckIfAppIsRunningActivity");
context.startActivity(i);
}
} else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
if (mBluetoothAdapter.isEnabled()){
mBluetoothAdapter.disable();
//TODO if app is open, change text on button to off
//Toast.makeText(context, "turned off bluetooth", Toast.LENGTH_LONG).show();
Intent i = new Intent();
i.setClassName("vermel.BluetoothOn", "vermel.BluetoothOn.CheckIfAppIsRunningActivity");
context.startActivity(i);
}
}
}
}
несколько вещей: да, я знаю, что я не должен использовать .enable () без разрешения пользователя. странным образом, подключение телефона - это мое разрешение пользователя, так как это ВСЕ, что делает это приложение, поэтому оно не подлое, так как вы знаете, что получаете, когда устанавливаете приложение.
Прокомментированные вещи - это, в основном, вещи, которые я пробовал напрасно ..
Я очень открыт тому факту, что я делаю этот ПУТЬ сложнее, чем мне нужно ...
так что, как я уже сказал, он прекрасно включает и выключает Bluetooth, но просто вылетает после этого. Я не могу отладить его, так как в эмуляторе нет Bluetooth, и я отключаю телефон, чтобы получить результат сбоя, поэтому он ничего не регистрирует, так как теперь он подключен ...
Я новичок в Java и Android, и был бы признателен за терпение. Я пытаюсь прочитать официальную документацию по Android, но для меня это похоже на китайский ... так что подробное объяснение было бы здорово ...
Спасибо за чтение!