Я разрабатываю простое приложение android для изменения состояния Bluetooth моего устройства. Сначала я объясняю текущее приложение, а после этого я описываю то, что я хочу сделать. Здесь я оставляю вам мой код, разделенный на три файла:
AndroidManifest. xml (файл манифеста)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bluetoothapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- We are now adding Bluetooth mandatory permissions -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
activity_main. xml (файл макета)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:gravity="center_horizontal"
android:id="@+id/linearlayoutid"
tools:context=".MainActivity">
<ImageView
android:id="@+id/bluetoothIv"
android:layout_width="100dp"
android:layout_height="100dp"
/>
<!-- On Button -->
<Button
android:id="@+id/onOffBtn"
android:minWidth="200dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Turn On/Off"
style="@style/Base.Widget.AppCompat.Button.Colored"
/>
</LinearLayout>
MainActivity. java (внутренний файл)
package com.example.bluetoothapp;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.os.Bundle;
import android.os.strictmode.WebViewMethodCalledOnWrongThreadViolation;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Set;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_ENABLE_BT = 0;
private static final int REQUEST_DISCOVER_BT = 1;
LinearLayout ll;
ImageView mBlueIv;
Button mOnOffBtn;
BluetoothAdapter mBlueAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBlueIv = findViewById(R.id.bluetoothIv);
mOnOffBtn = findViewById(R.id.onOffBtn);
ll = findViewById(R.id.linearlayoutid);
// adapter
mBlueAdapter = BluetoothAdapter.getDefaultAdapter();
// Set image according to blueetoth status
if (mBlueAdapter.isEnabled()){
mBlueIv.setImageResource(R.drawable.ic_action_on);
}
else{
mBlueIv.setImageResource(R.drawable.ic_action_off);
}
//on button click:
mOnOffBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mBlueAdapter.isEnabled()){
showToast("Turning on Bluetooth...");
//intent to turn on bluetooth
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, REQUEST_ENABLE_BT);
mBlueIv.setImageResource(R.drawable.ic_action_on);
}
else{
mBlueAdapter.disable();
showToast("Turning Bluetooth off");
mBlueIv.setImageResource(R.drawable.ic_action_off);
}
}
});
}
//toast message function
private void showToast(String msg){
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
В результате , мы получаем это приложение:
Когда мы открываем приложение, у нас есть эти две возможности. Если Bluetooth включен, мы получаем зеленую картинку, а если она выключена, мы получаем красную картинку. В этих двух сценариях ios, если мы нажмем кнопку, изображение изменится (с зеленого -> красный и с красного -> зеленый), и блютуз также изменит свой статус (с вкл. -> выкл. И из выкл. -> вкл.) .
Моя главная проблема - я хочу обновить изображение (в зависимости от состояния Bluetooth) в фоновом режиме. Например: «представьте, что я открываю приложение с включенным блютузом, что приводит меня к зеленой картинке. Затем вместо нажатия кнопки, чтобы выключить блютус, я выхожу из приложения (не убивая его), и я Отключите Bluetooth от настроек устройства. После этого я возвращаюсь к приложению, и я хотел бы, чтобы приложение понимало, что Bluetooth теперь выключен, поэтому он автоматически меняет зеленое изображение на красное ". То, что в данный момент происходит, это то, что у нас все еще есть зеленая картинка, хотя Bluetooth теперь отключен.
Как я могу постоянно проверять состояние Bluetooth каждые n секунд в фоновом режиме?
Большое спасибо в продвинутом!
С уважением,
Серхио