■ テスト概要
・Android 10の端末では、socketのconnectがちゃんと機能していたが、Android 11 の端末だと精度がかなり悪くなる。
対象テストバージョン
(Bluetooth 2.0)(Bluetooth 3.0)
■ テスト用ソースコード
xml activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<Button
android:id="@+id/connectButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="接続する" />
<Button
android:id="@+id/dis_connectButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切断する" />
</LinearLayout>
java MainActivity.java
package com.example.bluetooth_con_test_01;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
// プリンター アドレス :: E47FB2FDF13B
// "00:01:95:98:D0:3B"; アダプター01
// 00:01:95:43:98:27 アダプター 02
private static final String DEVICE_ADDRESS = "00:01:95:98:D0:3B"; // Bluetoothアドレス
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // SPPプロファイルのUUID
private BluetoothAdapter bluetoothAdapter;
private BluetoothSocket socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println(" onCreate ********* APP スタート **********");
Button connectButton = findViewById(R.id.connectButton);
connectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("=========== 接続ボタン:::クリック start ==============");
connectToDevice();
}
});
Button dis_connectButton = findViewById(R.id.dis_connectButton);
dis_connectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if(socket != null) {
socket.close();
System.out.println(" 切断ボタン ********* 切断OK **********");
}
} catch (IOException e11) {
e11.printStackTrace();
}
}
});
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// デバイスがBluetoothをサポートしていない場合
showToast("デバイスBluetoothサポート外");
finish();
}
}
private void connectToDevice() {
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(DEVICE_ADDRESS);
try {
// socket = device.createRfcommSocketToServiceRecord(MY_UUID);
BluetoothSocket A_socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
A_socket.connect();
System.out.println("接続 A_socket :::" + A_socket);
this.socket = A_socket;
// 接続成功時の処理
showToast("接続成功");
System.out.println("******************* 接続成功 ********************");
} catch (IOException e) {
// 接続失敗時の処理
showToast("接続に失敗:" + e.getMessage());
System.out.println("接続に失敗:" + e.getMessage());
try {
if(this.socket != null) {
this.socket.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
System.out.println("======= if パーミッション 内 return; ::: END ======");
return;
}
}
private void showToast(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}
■結果
・Android 10
(Bluetooth 2.0)(Bluetooth 3.0)
● ●
・Android 11
(Bluetooth 2.0)(Bluetooth 3.0)
×(不安定) ●