1

私はすでにこの質問をここで数回行っていますが、既に持っている機能を台無しにしてしまうのではないかと恐れているため、コードに何かを投げ始めるのに十分な自信がありません.

私がやりたいことは、データを送受信できるデバイスとの Bluetooth 接続を確立し、いくつかの異なるアクティビティからアクセスできるようにすることです。インテントを使用できることは知っていますが、インテントがどのように機能するかを説明できる人はいますか?

アクティビティから開始した場合、そのアクティビティ内でオブジェクトを作成して終了し、オブジェクトを保持する方法がわかりません。次のアクティビティでインテントを呼び出す場合、どのようにアクセスすればよいですか?

インテントを介して渡され、別のアクティビティで開かれ、別のアクティビティを介して再び渡されるカスタム オブジェクトを含むアクティビティのサンプル コードが見つかりません。私が見つけることができるのは、文字列、int のものだけで、これらのメソッドは特定のオブジェクト用にハードコードされているようです。

どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

2

カスタム オブジェクトをアクティビティから別のアクティビティに渡したい場合、オブジェクトは Parcelable インターフェイスを実装する必要があります。

ここでは、Parcelable を実装するオブジェクトの例を見つけることができます。このオブジェクトのインスタンスを取得したら、それをインテントに追加して、他のアクティビティに渡すことができます。

A と B の 2 つのアクティビティがあるとします。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 の実装として転送したいクラスを宣言することで、任意のオブジェクトを意図的に転送することができます。

ただし、正当な理由がない限り、これはお勧めできません。「クロス アクティビティ」オブジェクト (データベース、シングルトーン、サービスなど) を作成する方法は無限にあり、インテントで複雑なオブジェクトを渡すのは重い操作です。そうすることもひどいパフォーマンスをします。

とにかく - とにかくやりたい場合は、それが方法です:

これはserlizableオブジェクトを渡す方法です:

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

これは、他のアクティビティでそれを達成する方法です:

getIntent().getSerializableExtra(name);

アクティビティを終了した後、オブジェクトがまだどのように生きているのか理解できないという質問について - finish() アクティビティは気晴らしをトリガーしていません!!! しかし、 onDestoy() コールバックをトリガーします。システムは、アクティビティ distracor を呼び出す適切なタイミングを決定します。たとえそれが気晴らしであったとしても、Intent オブジェクトが生き続けることを妨げているわけではありません。なぜなら、あなたのアクティビティがそれへの参照を保持している唯一のものであると誰も言っていないからです。システムで開かれた新しいアクティビティに渡す目的でシステムが保持するインテント参照。

于 2012-06-15T13:57:14.617 に答える
1

インテントを使用すると、オブジェクトをバイトストリームに変換するようなシリアル化されたオブジェクトを送信できます。オブジェクトをそのまま送信したい場合は、ハンドラーを使用できます。例えば

  1. サービス(Androidサービス)を使用してBluetooth接続を作成します
  2. 静的オブジェクトになるアクティビティでハンドラーを定義します
  3. サービスからオブジェクトを送信する msg.obj に追加 そのメッセージをハンドラに送信
于 2012-06-15T14:01:23.863 に答える