2014-11-24 98 views
0

我試圖與接收器一起檢查與不同設備的藍牙連接,然後將其記錄在logcat中。它適用於正常情況,但在重新啓動時會失敗。重新啓動後接收藍牙連接更改

這是一個正常的工作流程:

  1. 手機上
  2. 切換藍牙開/關
  3. 重啓手機
  4. 重新連接設備,重新啓動

我可以看到2後再次我的日誌如此正常的情況下正常工作。但是我錯過了4,並且在重新啓動後沒有獲得單個事件,所以我不知道我們是否再次連接。

我的表現有這樣的:

<receiver android:name=".settings.BluetoothReceiver" 
       android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.bluetooth.device.action.ACL_CONNECTED" /> 
       <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" /> 
       <action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" /> 
      </intent-filter> 
     </receiver> 

而這些權限:

<uses-permission android:name="android.permission.BLUETOOTH" /> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

我的藍牙reciver是這樣的:

public class BluetoothReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
    if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
     Log.e("BluetoothReceiver", "ActionFound"); 
    } 
    JSONObject status = new JSONObject(); 
    try { 
     status.put("status", action); 
     status.put("name", device.getName()); 
     status.put("address", device.getAddress()); 
     Calendar c = Calendar.getInstance(); 
     status.put("time", c.getTime()); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    Log.e("BluetoothReceiver", status.toString()); 
} 

}

有什麼項目EATCHIP如何做到這一點?如果我在重新啓動後沒有收到第一個藍牙連接事件,那麼一切都是毫無價值的。或者在重啓後以某種方式啓動接收器?

回答

0

你能趕上

<action android:name="android.intent.action.BOOT_COMPLETED" /> 
BluetoothReceiver

和手動檢查藍牙連接狀態。

P.S.不要忘記

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

檢查http://www.jjoe64.com/2011/06/autostart-service-on-device-boot.html例如

+0

感謝的答案,但我會如何手動檢查呢?我的意思是在我的onReceive我有這條線走出設備: BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 但我想我必須將其更改爲啓動完成的其他內容?我是否必須獲得藍牙適配器並檢查與所有設備的連接?我使用接收器的原因是因爲我認爲你無法檢查連接,而是必須等待更改。 – user1776562 2014-11-24 13:37:25

+0

您可以使用'BluetoothAdapter'類。在這裏查看示例http://www.programcreek.com/java-api-examples/index.php?api=android.bluetooth.BluetoothProfile – 2014-11-24 13:48:54