2013-05-08 28 views
0

我需要一些建議或指導如何解決這個問題。我的應用有3個基於3個片段類和一個MainActivity的選項卡。當我啓動應用程序時,在MainActivity中建立藍牙連接。因爲這個原因,我得到了建立連接的線程並開始監聽數據,這些數據也保存在緩衝隊列中的線程中。其他一些班級解析這些數據並將其放入公共班級,這些數據可從任何地方訪問。標籤片段中的事件?

所以我的問題是:第一個選項卡被稱爲INFO選項卡,並從信息片段或MainActivity我需要BT連接建立後立即發送BT信息請求。但我不能在info fragment中的onCreateView方法上做到這一點,因爲連接需要幾秒鐘才能獲得establisehd,所以它會崩潰。我必須指出已建立的連接變量布爾deviceConnected,它在設備連接時設置爲true。因此,我認爲我需要一些事件,它將測試變量deviceConnected,當它將成爲true時,它將發送信息請求(通過BT發送數據的方法從MainActivity中調用)。我還需要一些事件,它將測試分析數據何時可用,以重新添加UI選項卡。請幫忙!如果你不明白我在找什麼,我可以提供代碼或其他解釋。

這是片段選項卡的代碼。當按下「按鈕」時,我們從MainActivity調用方法來啓動連接。我們也發送意向,但只是味精「等等」。我如何知道,我正在等待連接的藍牙?

public class FragmentA extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); 
     Button button = (Button) myFragmentView.findViewById(R.id.button1); 

     //when button connect is clicked, call method from MainActivity 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      //start bluetooth connection in MainActivity  
      ((MainActivity)getActivity()).startConnectionFromActivity(); 
      final Intent intent = new Intent(); 
      intent.setAction(android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED); 
      getActivity().sendBroadcast(intent);    
      } 
     }); 

     return myFragmentView; 
    } 

} 

這裏是我的MainActivity的部分:

public class MainActivity extends Activity { 
     private BroadcastReceiver mReceiver; 

    @Override 
     protected void onResume() { 
      // TODO Auto-generated method stub 
      super.onResume(); 
      IntentFilter intentFilter = new IntentFilter(
        android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED); 
      mReceiver = new BroadcastReceiver() { 
       @Override 
       public void onReceive(Context context, Intent intent) { 

        //from there should I send request info?? 

       } 
      }; 
      //registering our receiver 
      this.registerReceiver(mReceiver, intentFilter); 
     } 

     @Override 
     protected void onPause() { 
      // TODO Auto-generated method stub 
      super.onPause(); 
      //unregister our receiver 
      this.unregisterReceiver(this.mReceiver); 
     } 
} 

如果我理解正確的,如果這是所有設置後,當BT將建立,的onReceive收作方法初探會被解僱?那麼從那裏我可以通過藍牙發送信息請求?感謝幫助!

+0

你好,有點推動時間提供一個完整的答案今天上午,但你的想法是轟轟烈烈的使用事件。這是一個迷你指南; http://stackoverflow.com/a/10608083/1348379 – OceanLife 2013-05-08 08:47:00

+0

是的,這是我所需要的,我編輯我的帖子並添加一個代碼,因爲我不完全理解它,並且如果你幫助我會很高興。謝謝! – anze87 2013-05-08 12:40:16

回答

0

您可以檢查設備是否有喜歡這裏連接:How to detect if bluetooth device is connected

爲什麼不實現自己的事件,告知您解析的結束?一個起點可能是這樣的:Android Custom Event

+0

我試圖檢查設備是否連接,就像在這個例子中,但我得到這個錯誤:05-09 08:07:25.085:E/AndroidRuntime(12506):java.lang.SecurityException:權限拒絕:不允許發送廣播android.bluetooth.device.action.ACL_CONNECTED從pid = 12506,uid = 10212 – anze87 2013-05-09 06:09:54

+0

您的清單中缺少一些權限丟失的權限。你添加了BLUETOOTH和BLUETOOTH_ADMIN嗎? – sandkasten 2013-05-13 08:08:17

+0

是的,我添加了這個permitions。我現在使用不同的解決方案,所以我不需要檢查ACL_CONNECTED。 – anze87 2013-05-14 07:15:57