首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android后台运行listener

android后台运行listener
EN

Stack Overflow用户
提问于 2013-12-12 19:00:34
回答 1查看 1.4K关注 0票数 1

每当有数据写入usb串口时,我都需要从usb串口接收数据。

为此,我创建了一个具有onread侦听器的服务,该侦听器在数据可用时从串行端口读取数据。

我用我的活动中收到的数据追加了一个文本视图。但我什么也看不见。

我的服务正在运行,但无法接收任何数据。

下面是我的服务类代码。

代码语言:javascript
复制
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();
    }
}

现在我的活动,

代码语言:javascript
复制
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);
    }
}; 
EN

回答 1

Stack Overflow用户

发布于 2014-05-09 23:42:32

您可以在getData runnable中设置您的读取侦听器。这意味着侦听器仅在getData运行时有效。由于getData会立即终止,因此侦听器永远没有机会执行。

要么将侦听器移出getData,要么让getData成为与您的服务具有相同生命周期的长时间运行的线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20541669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档