この問題を解決するためのアドバイスや指示が必要です。私のアプリには、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 経由で情報要求を送信できますか? 手伝ってくれてありがとう!