android service 监听广播,在Android中用广播监听AccessibilityService的开启状态并更新UI界面...

建立服务html

既然要用服务来更新UI界面,理所固然须要一个服务。在MainActivity.java所在目录下建立如下文件java

import android.accessibilityservice.AccessibilityService;

import android.view.accessibility.AccessibilityEvent;

public class TestService extends AccessibilityService {

@Override

public void onAccessibilityEvent(AccessibilityEvent event) {

}

@Override

public void onInterrupt() {

}

@Override

protected void onServiceConnected() {

super.onServiceConnected();

}

@Override

public void onDestroy() {

super.onDestroy();

}

}

注册服务

如今已经拥有一个服务,但还不能运行它,要在AndroidManifest.xml中注册它android

android:name=".TestService"

android:label="@string/app_name"

android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

......

声明广播对象

如今服务能正常开启和关闭了,可是须要在开启和关闭时,发送一个广播,那么,在服务文件中添加如下代码便可app

import android.accessibilityservice.AccessibilityService;

import android.content.Intent;

import android.view.accessibility.AccessibilityEvent;

public class TestService extends AccessibilityService {

//Intent构造器里面的变量是一个字符串,一般在要更新UI的文件中进行定义

private Intent intent = new Intent(MainActivity.ACTION_SERVICE_STATE_CHANGE);

@Override

public void onAccessibilityEvent(AccessibilityEvent event) {

}

@Override

public void onInterrupt() {

}

@Override

protected void onServiceConnected() {

super.onServiceConnected();

sendAction(true);

}

@Override

public void onDestroy() {

super.onDestroy();

sendAction(false);

}

private void sendAction(boolean state) {

intent.putExtra("state", state);

sendBroadcast(intent);

}

}

添加广播接收器

在MainActivity中添加一个内部类继承于BroadcastReceiver,名字随意。参考代码以下ide

private class ServiceStateReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

textView.setText(intent.getBooleanExtra("state", false) ? "服务已开启" : "服务已关闭");

}

}

注册广播接收器

Activity的启动顺序是:onCreate()-->onStart()-->onResume()-->onStop()-->onDestory()ui

因此我只须要MainActivity.java中添加如下代码便可。参考代码以下code

@Override

protected void onResume() {

super.onResume();

IntentFilter filter = new IntentFilter();

filter.addAction(ACTION_SERVICE_STATE_CHANGE);

registerReceiver(new MainActivity.ServiceStateReceiver(), filter);

}

参考代码

public class MainActivity extends AppCompatActivity {

public static final String ACTION_SERVICE_STATE_CHANGE = "ACTION_SERVICE_STATE_CHANGE";

private TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView=findViewById(R.id.textView);

}

@Override

protected void onResume() {

super.onResume();

IntentFilter filter = new IntentFilter();

filter.addAction(ACTION_SERVICE_STATE_CHANGE);

registerReceiver(new MainActivity.ServiceStateReceiver(), filter);

}

private class ServiceStateReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

textView.setText(intent.getBooleanExtra("state", false) ? "服务已开启" : "服务已关闭");

}

}

}

到这里已经大功告成了,大家能够看到当咱们开启关闭服务以后返回主页,页面上的TextView的文字内容已经根据广播内容发生了改变xml

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值