簡體   English   中英

Android - 如果應用程序暫停(到后台),是否會調用應用程序的LeScanCallback?

[英]Android - Would LeScanCallback of an App get called if the App goes onPause (to the background)?

我一直在http://developer.android.com/guide/topics/connectivity/bluetooth-le.html上查看BLTE示例代碼

public class DeviceScanActivity extends ListActivity {

    private BluetoothAdapter mBluetoothAdapter;
    private boolean mScanning;
    private Handler mHandler;

    // Stops scanning after 10 seconds.
    private static final long SCAN_PERIOD = 10000;
    ...
    private void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCAN_PERIOD);

            mScanning = true;
            mBluetoothAdapter.startLeScan(mLeScanCallback);
        } else {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }
        ...
    }
...
}

    private BluetoothAdapter.LeScanCallback mLeScanCallback =
            new BluetoothAdapter.LeScanCallback() {
        @Override
        public void onLeScan(final BluetoothDevice device, int rssi,
                byte[] scanRecord) {
            runOnUiThread(new Runnable() {
               @Override
               public void run() {
                   mLeDeviceListAdapter.addDevice(device);
                   mLeDeviceListAdapter.notifyDataSetChanged();
               }
           });
       }
    };

現在,我注意到這段代碼在調用startLeScan時提供了一個LeScanCallback。

假設此應用程序通過startLeScan。 然后這個應用程序轉到onPause(),說另一個應用程序轉到前台。 並且永遠不會調用stopLEScan。

此時,Android是否繼續進行LE掃描?

在startLeScan的某一點,它打開了實際的硬件。 但是應用程序已經使用onPause()並且硬件可能會繼續運行。

是的,即使您的應用程序在后台,掃描也會繼續運行,如果找到藍牙設備,您的onLeScan()回調將被調用。

只需啟動掃描然后通過主頁按鈕退出應用程序,打開藍牙外設,然后查看日志,即可輕松測試。 您還可以在回調中刪除一個斷點,即使您的應用不在前台,也會受到影響。

掃描耗盡電池,因此根據您要完成的操作,最佳做法是在onPause() mBluetoothAdapter.stopLeScan(mDeviceFoundCallback)停止掃描,如果需要在onResume() mBluetoothAdapter.startLeScan(mDeviceFoundCallback)重新啟動掃描mBluetoothAdapter.startLeScan(mDeviceFoundCallback)

如果由於某種原因您需要長時間運行背景藍牙活動(例如,您正在實施接近配置文件並需要定期檢查信號強度),那么該功能應該進入服務實現,如您鏈接到的文檔中所示: http: //developer.android.com/guide/topics/connectivity/bluetooth-le.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM