0

この問題を解決するためのアドバイスや指示が必要です。私のアプリには、3 つのフラグメント クラスと 1 つの MainActivity に基づく 3 つのタブがあります。アプリを起動すると、MainActivity で Bluetooth 接続が確立されます。そのため、接続を確立し、着信データのリッスンを開始するスレッドを取得しました。このデータは、バッファキューのスレッドにも保存されています。他のクラスがこのデータを解析し、どこからでもアクセスできる public クラスに入れます。

だから私の問題は次のとおりです。最初のタブはINFOタブと呼ばれ、情報フラグメントまたはMainActivityから、BT接続が確立された直後にBT情報要求を送信する必要があります。しかし、情報フラグメントの onCreateView メソッドでそれを行うことはできません。接続が確立されるまでに数秒かかるため、クラッシュします。デバイスが接続されているときにtrueに設定されている、確立された接続変数boolean deviceConnectedを示すために持っています。

したがって、変数 deviceConnected をテストするイベントが必要だと思います。それが true になると、情報要求が送信されます (BT 経由でデータを送信するメソッドは MainActivity から呼び出されます)。UIタブを参照するために、解析されたデータが利用可能になったときにテストするイベントも必要です。助けてください!私が探しているものが理解できない場合は、コードまたは別の説明を提供できます。

これはフラグメントタブのコードです。「ボタン」が押されると、接続を開始するために MainActivity からメソッドを呼び出します。Intention も送信しますが、メッセージは "blah" だけです。接続された Bluetooth で待機していることをどのように確認できますか?

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 メソッドが起動されますか? そこから Bluetooth 経由で情報要求を送信できますか? 手伝ってくれてありがとう!

4

1 に答える 1