1

我正在使用 BluetoothChat 示例来建立蓝牙通信。我现在创建了 SecondView.java,我想从那里发送和接收数据,而不必重新连接到蓝牙。有什么方法可以将 BluetoothChat.java 示例中使用的发送和接收方法访问到我的 SecondView.java?我发现一种工作方法是使用绑定服务,但我不知道如何实现这个..

4

1 回答 1

3

如果您正在关注蓝牙聊天示例,那么您将使用线程进行蓝牙通信,例如,具有蓝牙通信读取和写入方法的连接线程。

能够从应用程序中的任何位置读取和写入实际上非常简单。您只需要为您的应用程序提供对该线程的全局引用。

在 android 应用程序中,应用程序有一个在整个应用程序中是全局的上下文。您可以从任何活动中使用 getApplication() 方法获取此信息。要在“应用程序”上下文中设置自己的变量,您需要扩展应用程序类,并将清单指向它。

这是一个例子。我已经扩展了应用程序类,并使用 getter 和 setter 方法为连接的线程创建了一个变量。

class MyAppApplication extends Application {
        private ConnectedThread mBluetoothConnectedThread;

        @Override
        public void onCreate() {
            super.onCreate();
        }

        public ConnectedThread getBluetoothConnectedThread() {
            return mBluetoothConnectedThread;
        }

        public void setBluetoothConnectedThread(ConnectedThread mBluetoothConnectedThread) {
            this.mBluetoothConnectedThread = mBluetoothConnectedThread;
        }

    }

并且要将清单指向该类,您需要将应用程序元素的 android:name 属性设置为我们在上面创建的应用程序类的类名。例如

 <application
        android:name="com.myapp.package.MyApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

完成后,您可以通过调用在活动中的任何位置访问 ConnectedThread

MyAppApplication.getBluetoothConnectedThread().write()
MyAppApplication.getBluetoothConnectedThread().read()

请注意,您需要在创建模型后首先将线程设置为模型:

MyAppApplication.setBluetoothConnectedThread(MyNewConnectedThread);

希望有帮助。

于 2012-10-16T09:38:03.427 回答