在我的公共类中,BluetoothLeService扩展了Service,我有以下代码:
private void updateTimeValues(BluetoothGattCharacteristic characteristic) {
TextView time = (TextView) findViewById(R.id.time);
time.setText(R.string.time);
对于BluetoothLeService类型,未定义findViewById。我知道该函数是在Activity类中声明的,但是如何在不扩展Activity类的情况下实现该函数。
我是Android开发的新手,所以请尽可能详细说明您的答案:)
谢谢!
答案 0 :(得分:2)
这是对的。服务没有ui。从文档
服务是一个可以执行长时间运行的应用程序组件 在后台运行并且不提供用户界面。
您可以使用LocalBroadcastManager
与Activity
的{{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();
希望这有帮助!