java - 将蓝牙连接传递给新的 Activity

标签 java android multithreading sqlite interprocess

我有一个包含主 Activity 的应用程序,它有一个非常简单的屏幕,其中包含所有应用程序设置选项和一些用户选择。主屏幕按钮启动其他 Activity 。

(1) 我现在正在应用程序中实现蓝牙扫描仪,我希望能够编辑设置并在主 Activity 上建立蓝牙连接,并将该连接(也许通过 Bundle 或 Parcelable?)传递给其他 Activity 。

我将 Bundle 作为传递连接的一种方式进行查找,但它似乎只接受原始类型和基本类型作为值。我注意到 Intent.putExtra(String, Parcelable) 可用,但 Parcel 有点让我困惑。实现这一点的最佳方法是什么,或者是否可能?

一些相关代码:

//subclass definitions for the Runnables which start the applications in their own threads
private final Handler smsHandler = new Handler();
private final Handler smsOutHandler = new Handler();

private final Runnable smsIntentRunnable = new Runnable() {
    public void run() {
        Intent smsIntent = new Intent(smsMobile.this, smsActivity.class);
        startActivity(smsIntent);
    }
};

private final Runnable smsOutIntentRunnable = new Runnable() {
    public void run() {
        Intent smsOutIntent = new Intent(smsMobile.this, smsOutActivity.class);
        startActivity(smsOutIntent);
    }
};

//button listeners located in onCreate(), which start the Activities
newTicket.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        smsHandler.post(smsIntentRunnable);
    }
});

updateTicket.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        smsOutHandler.post(smsOutIntentRunnable);
    }
});

(2) 我还可以传递数据库连接吗?我知道 SQLiteOpenHelper 必须被子类化,这可能会使 IPC 复杂化,但认为它仍然可能以某种方式实现?

最佳答案

我正在重写一个应用程序,以在两个 Activity 之间共享蓝牙服务。以前,我刚刚通过在启动 Activity (设置服务以及启动其他 Activity 的位置)中将蓝牙服务初始化为公共(public)对象来解决该问题,然后调用 .read() 和 .write( )新 Activity 中的公共(public)服务职能。这对于写入来说效果很好,但是对于读取来说有点繁重(每次我期望数据返回时我都必须启动一个线程,坐下来等待数据)。我已将所有其他项目迁移为仅在服务读取某些关键数据时执行从蓝牙服务处理程序提示的某些操作(例如,在收到编码温度数据时更新用户界面上的温度)。 为了能够通过这两种 Activity 进行更优雅的阅读,我在蓝牙服务中添加了一个新功能:

/**
 * Change the handler (route handler info to new activity). */
public synchronized void newHandler(Handler handle) {
    mHandler = handle;
}

然后调用此函数,在新 Activity 启动时从新 Activity 重新分配新处理程序(例如,“StartingActivity.mBTService.newHandler(NewActivityHandler);”) 当然,当返回到 StartingActivity 时,请确保适本地重新分配 Handler ;-)

令我惊讶的是,它确实有效,不需要通过应用程序将蓝牙服务变成单例、可分割对象或全局服务(我都无法成功编码)的所有开销。

我将进行更彻底的测试,但希望这对某人有帮助(是时候我回馈一些东西了 - 我从这个社区学到了很多东西)!

关于java - 将蓝牙连接传递给新的 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5030150/

相关文章:

java - 关于 Swing GUI 中的线程

multithreading - 有关 OSGi 中的线程数的信息

java - NOSQLUnit-mongoDB-示例

java - 如何在每个方法的基础上限制 JAX-RS 中的对象图?

Java:将通用类型(T)对象转换为由类型化调用签名识别的完全类型化对象?

java - 我正在向服务器发送 GET 方法,但接收 POST 方法

android - 如何使用编辑文本和 SimpleCursor 适配器过滤 ListView?

java - Spring security 并发控制不起作用

Android:应用程序最终在执行后的异步任务中崩溃

java - 如何处理 doGet 或 doPost 中潜在的长时间操作?