Можем ли мы активировать приложение Android через Bluetooth или сигнал BLE с устройства - Android 8.0 и выше? - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь разбудить мое приложение для Android через близлежащие устройства Bluetooth.Если я принудительно закрою приложение (в Android 8.0 и более поздних версиях), и когда я подвожу свое устройство Android близко к устройству BLE, могу ли я получить обратный или намеренный обратный вызов, чтобы я мог активировать службу ForeGround и заставить приложение бодрствовать.

Я пробовал сканировать устройства BLE поблизости, но когда приложение принудительно уничтожено, сканирование BLE останавливается, и я не могу разбудить приложение через устройства BLE поблизости.

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Да. В Android 8+ вы можете использовать сканирование по назначению, привязанное к BroadcastReceiver, чтобы активировать приложение, основанное на обнаружении рекламы BLE. BroadcastReceiver будет работать только в течение нескольких секунд, но вы можете использовать это время для немедленного запуска JobService, который может работать до 10 минут. Это именно то, что Библиотека Android Beacon делает «из коробки», чтобы разрешить обнаружение фона. Вы также можете использовать службу переднего плана для работы в фоновом режиме более 10 минут. Подробнее об опциях здесь .

ScanSettings settings = (new ScanSettings.Builder().setScanMode(
                                ScanSettings.SCAN_MODE_LOW_POWER)).build();
// Make a scan filter matching the beacons I care about
List<ScanFilter> filters = getScanFilters(); 
BluetoothManager bluetoothManager =
            (BluetoothManager) mContext.getApplicationContext()
                                       .getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
Intent intent = new Intent(mContext, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent,
                                                         PendingIntent.FLAG_UPDATE_CURRENT);
bluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, pendingIntent);

Приведенный выше код вызовет запуск Intent, который вызовет вызов класса MyBroadcastReceiver при обнаружении соответствующего устройства Bluetooth. Затем вы можете получить данные сканирования следующим образом:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      int bleCallbackType = intent.getIntExtra(BluetoothLeScanner.EXTRA_CALLBACK_TYPE, -1);
      if (bleCallbackType != -1) {
        Log.d(TAG, "Passive background scan callback type: "+bleCallbackType);
        ArrayList<ScanResult> scanResults = intent.getParcelableArrayListExtra(
                                               BluetoothLeScanner.EXTRA_LIST_SCAN_RESULT);
        // Do something with your ScanResult list here.
        // These contain the data of your matching BLE advertising packets
      }
    }
}
1 голос
/ 14 июня 2019

Force stop убивает приложение полностью.Он не получит FCM, также будут удалены тревоги в AlarmManager и т. Д. Таким образом, процессы приложения полностью уничтожаются, а любая информация удаляется.

...