2013-12-12 4 views
1

Мне нужно получать данные из последовательного порта usb всякий раз, когда на нем записаны данные.Запуск прослушивателя в фоновом режиме в android

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

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

Служба работает, но не может получать данные.

Ниже приведен мой код класса обслуживания.

public class BroadcastService extends Service { 
    private static final String TAG = "BroadcastService"; 
    public static final String BROADCAST_ACTION = "com.example.flowtest.displayevent"; 
    private final Handler handler = new Handler(); 
    // DatabaseHandle db = new DatabaseHandle(this); 
    Intent intent; 
    int counter = 0; 
    int i = 0, flag = 0; 
    String d = "a"; 
    byte[] buf = new byte[5]; 
    byte[] start = new byte[21]; 
    byte[] rbuf;// updated 
    String str; 
    Physicaloid mPhysicaloid = new Physicaloid(this); 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     intent = new Intent(BROADCAST_ACTION); 
     // mPhysicaloid.open(); 

    } 

    @Override 
    public void onStart(Intent intent, int startId) { 

     mPhysicaloid.open(); 

     handler.removeCallbacks(getdata); 
     handler.post(getdata); 
    } 

    private Runnable getdata = new Runnable() { 
     public void run() { 
      Log.d("service", "in service"); 
      mPhysicaloid.addReadListener(new ReadLisener() { 

       @Override 
       public void onRead(int size) { 
        // TODO Auto-generated method stub 
        byte[] rbuf = new byte[size]; 
        mPhysicaloid.read(rbuf, size); 
        try { 
         str = new String(rbuf, "UTF-8"); 

         if (str.equals(null)) { 
          flag = 0; 
          intent.putExtra("inputString", "no luck"); 
          sendBroadcast(intent); 
         } else { 
          flag = 1; 
          intent.putExtra("inputString", str); 
          sendBroadcast(intent); 
         } 

         // sendBroadcast(intent); 

        } catch (UnsupportedEncodingException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

       } 

      }); 

     } 
    }; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     // handler.removeCallbacks(sendUpdatesToUI); 
     super.onDestroy(); 
    } 
} 

Сейчас моя деятельность,

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     updateUI(intent);  
    } 

    private void updateUI(Intent intent) { 
     // TODO Auto-generated method stub 
     String data = intent.getStringExtra("inputString").toString(); 
     if(data.equals("NORMAL")){ 
      i = new Intent(MainActivity.this,ModeScreenActivity.class); 
       startActivity(i); 
       finish(); 
     } 
     else{ 

     } 
     tvAppend(tv1,data); 
    } 
}; 
+0

Пожалуйста, помогите мне. Я хочу использовать фоновый сервис, поскольку последовательные данные будут использоваться многими действиями, и я не хочу писать onread listener во всех действиях. Пожалуйста, помогите –

+0

Я пробовал различные возможные способы, доступные в Интернете, но все же я застрял с этой проблемой. –

+0

Вы, вероятно, должны преследовать это с поставщиками «Физиоидов» в первую очередь. –

ответ

0

Вы настроить ваше чтение слушателя в GetData работоспособный. Это означает, что слушатель будет действителен только при запуске getData. Поскольку getData немедленно прекращается, слушатель никогда не получит шанс выполнить.

Либо переместите слушателя из getData, либо getData будет длинным потоком с тем же временем жизни, что и ваша служба.

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