1

我已经在这里问了几次这个问题,但仍然没有足够的信心开始将东西扔进我的代码中,因为我担心我会破坏它已经拥有的功能。

我想要做的是与我可以发送/接收数据的设备建立蓝牙连接,并能够从几个不同的活动中访问它。我知道可以使用 Intents,但是任何人都可以尝试解释 Intents 是如何工作的吗?

我不明白如果我从一个 Activity 开始,我如何在该 Activity 中构建一个对象,然后结束它,并且仍然拥有该对象。当我在以下 Activity 中调用意图时,如何访问它?

我找不到带有自定义对象的 Activity 的示例代码,该对象通过一个意图传递,在另一个 Activity 中打开,然后再次通过另一个 Activity,依此类推。我能找到的只是字符串、整数的东西,而且这些方法似乎是为特定对象硬编码的。

任何帮助将不胜感激,谢谢。

4

3 回答 3

2

如果您想将自定义对象从 Activity 传递给另一个,您的对象必须实现 Parcelable 接口。

在这里你可以找到一个实现 Parcelable 的对象的例子。一旦你有了这个对象的一个​​实例,你就可以将它添加到一个意图并将它传递给其他活动。

假设您有 2 个活动:A 和 B。如果您想将自定义对象从 A 发送到 B,请尝试将您的 parceable 对象放入一个意图中,然后在活动 B 中将其取回。

// Activity A
Notebook myNotebook = new Notebook(); // the "Parcelable" object
Intent intent = new Intent(A.this, B.class);
intent.putExtra("object", myNotebook);
startActivityForResult(intent);

// Activity B
// in onCreate method
Notebook notebook = intent.getParcelableExtra("object");
于 2012-06-15T14:08:38.073 回答
1

您没有找到传输复杂对象的好例子是有充分理由的:您不会这么想。可以有意地转移任何对象,将要转移的类声明为实现 Serializable 或 Parcalable。

但是 - 不建议这样做,除非你有充分的理由。创建“跨活动”对象(数据库、单音、服务..)的方法有无限种,并且在意图中传递复杂的对象是繁重的操作。这样做也会造成糟糕的表现。

无论如何 - 如果你想这样做,那就是这样:

这是传递可序列化对象的方法:

Intent intent =  new Intent();
    intent.putExtra(name, someInstanceOfClassWhichImplementsSerializableInterface);

这是如何在其他活动中实现它:

getIntent().getSerializableExtra(name);

关于在完成活动后您不了解对象如何仍然存在的问题 - finish() 活动不会触发干扰器!!!,但会触发 onDestoy() 回调。系统决定何时调用活动 distracor ,即使它是干扰物 - 它不会阻止 Intent 对象保持活力 - 因为没有人说你的活动是唯一持有对它的引用的活动。系统持有的意图引用,目的是将其传递给与它一起打开的新活动。

于 2012-06-15T13:57:14.617 回答
1

使用意图,您可以发送序列化对象,就像将您的对象转换为字节流一样。如果您想按原样发送对象,则可以使用处理程序。例如

  1. 使用服务(安卓服务)创建蓝牙连接
  2. 在您的活动中定义处理程序,这将是静态对象
  3. 从服务发送对象添加到 msg.obj 将该 msg 发送到处理程序
于 2012-06-15T14:01:23.863 回答