对于BluetoothLeService

时间:2016-02-02 09:15:28

标签: android findviewbyid

在我的公共类中,BluetoothLeService扩展了Service,我有以下代码:

private void updateTimeValues(BluetoothGattCharacteristic characteristic) {
    TextView time = (TextView)  findViewById(R.id.time);
    time.setText(R.string.time);

对于BluetoothLeService类型,未定义findViewById。我知道该函数是在Activity类中声明的,但是如何在不扩展Activity类的情况下实现该函数。

我是Android开发的新手,所以请尽可能详细说明您的答案:)

谢谢!

2 个答案:

答案 0 :(得分:2)

这是对的。服务没有ui。从文档

  

服务是一个可以执行长时间运行的应用程序组件   在后台运行并且不提供用户界面。

您可以使用LocalBroadcastManagerActivity的{​​{1}}进行通信,以便更新用户界面

答案 1 :(得分:1)

由于您无法直接从服务访问textView,您需要在活动中创建广播接收器。

在您的服务中,请在onCreate

上调用此方法
myBroadcast = LocalBroadcastManager.getInstance(this);

现在在updateTimeValues()使用myBroadcast:

Intent intent = new Intent("myNewBroadcastIntent");
        intent.putExtra("newtime", "//value you want to send");
    myBroadcast.sendBroadcast(intent);

现在在mainActivity的onCreate中创建接收器,如下所示:

myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String s = intent.getStringExtra("newtime");
        //now you can set it to the textView
    }
};

并将其注册为开始时间:

LocalBroadcastManager.getInstance(this)
     .registerReceiver((myReceiver),new IntentFilter("myNewBroadcastIntent"));

取消注册onStop:

LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver);
    super.onStop();

希望这有帮助!