-1

Android 開発者サイトの Bluetooth チャット アプリケーションを使用して、Bluetooth チャット アプリケーションを開発しています。

Bluetooth チャット要求を別のデバイス (以前にペアリングされていると仮定) に送信し、要求を受信するデバイスが任意のアクティビティに存在する場合と同様に、既存のコードにいくつかの変更を加えました。

現在表示中の画面にアラートを表示したいのですが、特定のアクティビティでのみアラートが表示されます。だから私は立ち往生しています。送信側と受信側の私のコードは次のとおりです。

if (FaceCardList.requestConnection &&
    FaceCardList.deviceSelected) {

    String authorization = "messagetype:startChat,"
                            + FaceCardList.ScreenName;
    FaceCardList.this.sendMessage(authorization);
}

受信側:

if (readMessage.indexOf("messagetype:startChat") != -1) {

    AlertDialog.Builder builder =
        new AlertDialog.Builder(FaceCardList.this);
    builder.setMessage(
        FaceCardList.screennmname + " wants to chat with you")
        .setCancelable(false)
        .setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface arg0, int arg1) {
                    Intent serverIntent = new Intent(
                            FaceCardList.this,
                            BluetoothChat.class);
                    startActivity(serverIntent);

                    String authorization = "messagetype:initiatechat";
                    FaceCardList.this
                            .sendMessage(authorization);
                }
            })
        .setNegativeButton("No",
            new DialogInterface.OnClickListener() {

                public void onClick(
                        DialogInterface diaLog,
                        int which) {
                    // TODO Auto-generated method stub

                    String authorization = "messagetype:stopservice";
                    FaceCardList.this
                            .sendMessage(authorization);

                    FaceCardList.mChatService.stop();
                    FaceCardList.mChatService.start();
                }
            });
    alert = builder.create();
    alert.show();
4

1 に答える 1

0

リクエストを受信する中央通信アクティビティが1つある場合は、ハンドラーを使用して他のアクティビティと簡単に通信できます。

参考のためにここを参照してください:http://developer.android.com/reference/android/os/Handler.html

多くのチュートリアルと例があります。

ハンドラーの使用は非常に簡単でありながら柔軟性があります。アクティビティをブロックすることはありませんが、パラメーターを渡すことでさえ、あらゆる種類の通信を可能にします。

静的メソッドを使用して中央コミュニケータークラスを作成し、この中央ポイントを介してすべての要求を送信して、この1つのポイント内で定義されたロジックに応じて任意のアクティビティにディスパッチできます。

パラメータを使用したこのようなメソッドの例を次に示します。

  static public void sendMessageToDialogDuringChat(
        int msgID, String msgText, boolean statusBool) {
    if (theHandlerForScreenUpdate == null)  // you need to create the receiving handler within this class beforehand
        return;
    Message msgForDialogDuringChat= theHandlerForScreenUpdate
        .obtainMessage(msgID);
    Bundle bundle = new Bundle();
    bundle.putBoolean(msgText, statusBool);
    msgForDialogDuringChat.setData(bundle);
    theHandlerForScreenUpdate
        .sendMessage(msgForDialogDuringChat);

    }

ここでは、メッセージを受信するためのハンドラーです。中央ディスパッチャ内に、メッセージを受信する適切なハンドラが格納されていることを確認してください。

  public final Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (DEBUG)
        Log.i(this.getClass().getSimpleName(),
            "-> "
                + Thread.currentThread().getStackTrace()[2]
                    .getMethodName() + " msg.what="
                + msg.what);
        switch (msg.what) {
        case MESSAGE_CONNECTION_SUCCESSFULL_FLAG: {
        boolean connectionOK = msg.getData().getBoolean(
            CONNECTION_SUCCESS);

        if (connectionOK)
            theStatusTV
                .setText(getString(R.string.connection_OK));
        else {
            theStatusTV
                .setText(getString(R.string.connection_NOT_OK));


        }
        }
        break;

        case MESSAGE_ALERT_FLAG: {
        ...start your alert here...

確かに、受信クラスでもそのすべてを行うことができます-「特別な」通信メッセージをどのように構成する必要があるかによって異なります

于 2012-04-21T10:03:07.920 に答える