だから私はデバイスのBluetoothディスカバリーを使用するAndroidアプリをプログラミングしています。これがディスカバリーを開始するために使用するコードです。
try {
myBluetoothAdapter.startDiscovery();
Log.d("Bluetooth Started successfully","yes");
} catch (Error e) {
Log.d("FAILED","Ya failed mate");
e.printStackTrace();
}
次に、BroadcastReceiverを登録して、デバイスが見つかったときに監視します。これがそのための私のコードです
IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
final ArrayList<String> stringArrayList = new ArrayList<>();
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getApplicationContext(),Android.R.layout.simple_list_item_1,stringArrayList);
final ListView listView = findViewById(R.id.listView);
listView.setAdapter(arrayAdapter);
BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d("ACTION RECEIVED","Action was received");
Log.d("Device Name", String.valueOf(intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)));
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
stringArrayList.add(device.getName());
arrayAdapter.notifyDataSetChanged();
listView.invalidateViews();
}
}
};
registerReceiver(myReceiver,intentFilter);
ListView、arrayAdapter、およびstringArrayListは、私が「ログに記録」しているものにすぎません。
問題は、そのコードを実行するたびにこのエラーが発生し、コードが機能しないことです。機能しないのはこのエラーが原因だと思います。
W/BroadcastQueue: Background execution not allowed: receiving Intent { act=Android.bluetooth.adapter.action.DISCOVERY_STARTED flg=0x10 } to com.verizon.messaging.vzmsgs/com.verizon.vzmsgs.receiver.DevicePairingListener
誰かがこのエラーの意味と修正方法を教えてもらえますか?
また、Stack Overflowで、非常によく似たエラーのある他の質問を見つけました。たとえば、Bluetoothの代わりに、BOOT_COMPLETED、ACTION_POWER_DISCONECTED、またはBATTERY_LOWのコンテキストになります。これらはどのようにこれに似ていますか。
私の場合-Android 9(APIレベル28)コード内でBroadcastReceiver
を定義する必要がありました。
このように(私の場合はサービス内に追加されます-それは問題ではありません)
private MyReceiver myReceiver;
@Override
public void onCreate() {
myReceiver = new MyReceiver();
this.registerReceiver(myReceiver, new IntentFilter("Android.intent.action.myreceiver"));
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
try {
if (intent.getAction().equals("Android.intent.action.myreceiver")) {
//logic goes here
}
} catch (Exception e) {
//some log goes here
}
}
}
このように放送を送る
Intent intentMy = new Intent();
intentMy.setAction("Android.intent.action.myreceiver");
intentMy.putExtra("whatever", true);
sendBroadcast(intentMy);