AndroidManifest之Service

可以参考 apidemo 和 google官方文档 --- 2个代码是不一样的可以借鉴

service是一个提供耗时操作的组件,类似于一个新的线程去处理一些复杂操作,但是执行该操作过程中用户可以继续执行其他操作
service不提供直接的和用户交互的接口,但是用户应该可以通过activity,notification等组件控制service,同时service也应该把运行状态反馈给用户
例如:下载文件,播放音乐等,用户既要能够控制该操作,同时又要能够知道操作的状态


service声明
在AndroidManifest.xml 中的  application标签内声明service
service可配置属性为:
android:name
android:label
android:description
android:icon
android:logo
android:permission
android:process
android:enabled
android:exported
android:stopWithTask
内部子标签
            <intent-filter ></intent-filter>
            <meta-data />





service启动方式
Context.startService()
Context.bindService()
am命令  例如  am startservice -n com.xxx.autoswitcher/com.xxx.autoswitcher.Switcher --es HelloWorld 'start wifi'

PS:对于应用来说 service有2中类型,一种是自己的service(LocalService) 另一种是别人的service(RemoteService)
         LocalService   应用可以直接引用对应的类和函数                                            参考 com.example.android.apis.app.LocalService.java
         Remoteervice 应用不能直接引用对应的类和函数,所以需要AIDL                参考 com.example.android.apis.app.RemoteService.java
                                                                                                                                                      com.example.android.apis.app.IRemoteService.aidl
                             ============================ 当写一个**.aidl之后,会在gen下面生成对应的java文件,这个文件需要分析


service的声明周期可以参考官方图示


2、service_binding_tree



今天在练习bindService时遇到问题
1、onServiceConnected  中的log没有打印出来
      原来 service中 onBind函数默认返回的是null 也就是没有IBinder 所以没有connection中的log
2、java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.kybsy.servicedetails.MyService$LocalBinder
      就是在connected 中 mMyService = ((MyService.LocalBinder)service).getService();
      原来是service配置了android:process=":remote"   导致无法转换  估计需要 IPC才可以




### 解决 AccessibilityServiceAndroidManifest 中无法识别的问题 为了使 `AccessibilityService` 能够正常工作并在 `AndroidManifest` 文件中被正确识别,需遵循特定的配置步骤。 #### 正确声明 AccessibilityService 组件 确保在 `AndroidManifest.xml` 文件中的 `<application>` 标签内正确定义了 `AccessibilityService` 的组件。这通常通过使用完整的类路径来实现: ```xml <service android:name=".MyAccessibilityService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibility_service_config" /> </service> ``` 上述代码片段展示了如何注册一个名为 `MyAccessibilityService` 的服务,并指定了该服务所需的权限以及指向 XML 配置文件的元数据标签[^1]。 #### 创建和配置 XML 文件 按照标准做法,在项目的 `res/xml/` 目录下创建一个新的 XML 文件(例如命名为 `accessibility_service_config.xml`),用来定义无障碍服务的具体行为参数。此文件应包含如下结构: ```xml <?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeAllMask" android:accessibilityFeedbackType="feedbackSpoken" android:canRetrieveWindowContent="true" android:description="@string/service_desc" android:packageNames="com.example.yourapp"/> ``` 这段XML设置了各种属性以控制 `AccessibilityService` 如何响应事件、反馈方式以及其他特性设置[^2]。 如果遇到编译错误提示找不到资源,则可能是由于项目同步失败或构建缓存未更新引起;尝试清理项目 (`Build -> Clean Project`) 并重新启动 IDE 可能会解决问题。 另外值得注意的是,当应用请求绑定到某个特定版本以上的 API 功能时,应该检查当前设备的操作系统版本号是否满足最低要求,因为某些功能可能仅适用于较新的平台版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值