2012-04-21 1 views
-1

Я разрабатываю приложение для чата Bluetooth с помощью приложения чата Bluetooth на сайте разработчика Android.Показывать оповещение в текущей активности другим устройством с помощью примера 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(); 

ответ

0

Если у вас есть одна центральная коммуникационную деятельность, которая принимает запросы вы можете просто использовать обработчик для связи с любую другую деятельность легко.

Смотрите здесь для справки: HTTP: //developer.android.com/reference/android/os/Handler.html

Есть много учебников и примеров.

Использование обработчиков чрезвычайно просто и в том же гибком - он не блокирует вашу деятельность, но позволяет любому виду связи, даже проходящие параметры

Вы можете создать центральный класс коммуникатора со статическими методами и отправить все ваши запросы через этот центральную точку для отправки любой активности, которая вам нравится, в зависимости от определенной логики в этой одной точке.

Вот пример такого метода с параметрами:

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... 

Конечно, вы могли бы сделать все, что в приемном классе, а также - зависит, как вы должны структурировать свои «особые» коммуникационные сообщения

Смежные вопросы