我需要一些建议或指导如何解决这个问题。我的应用有 3 个基于 3 个片段类和一个 MainActivity 的选项卡。当我启动应用程序时,在 MainActivity 中建立了蓝牙连接。出于这个原因,我有建立连接并开始监听传入数据的线程,这些数据也保存在缓冲区队列的线程中。其他一些类解析这些数据并将其放在公共类中,可以从任何地方访问。
所以我的问题是:第一个选项卡称为 INFO 选项卡,并且从信息片段或 MainActivity 我需要在 BT 连接建立后立即发送 BT 信息请求。但是我不能在信息片段中的 onCreateView 方法上这样做,因为连接需要几秒钟才能建立,所以它会崩溃。我必须指示已建立的连接变量 boolean deviceConnected,它在设备连接时设置为 true。
所以,我认为我需要一些事件,它将测试变量 deviceConnected,当它为真时,它将发送信息请求(通过 BT 发送数据的方法是从 MainActivity 调用的)。我还需要一些事件来测试解析的数据何时可用,以引用 UI 选项卡。请帮忙!如果您不明白我在寻找什么,我可以给出代码或其他解释。
这是片段选项卡的代码。当“按钮”被按下时,我们从 MainActivity 调用方法来开始连接。我们也发送 Intention,但只是用 msg "blah"。我怎么知道,我正在等待连接的蓝牙?
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 方法吗?所以从那里我可以通过蓝牙发送信息请求?感谢帮助!