AIDL接入Android 8.0和Android 11以上版本需要添加的设置
2023-12-20 09:19:46
直接开始正题
Client端绑定服务代码
val serviceIntent = Intent().apply {
component = ComponentName("包名", "服务类名")
action = "服务Action" //没有可以不写
}
val result = bindService(serviceIntent, connect, Context.BIND_AUTO_CREATE)
println("bindService result $result")
Android 8之后 也就是sdk>= 26 在服务类的onCreate中需要加入启动前台服务的代码,不然无法绑定服务
该代码需要再清单文件加入权限
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
代码如下
override fun onCreate() {
super.onCreate()
//.... 其他代码
startServiceForeground()
}
private fun startServiceForeground() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = NotificationChannel("ChannelID", "NotificationName", NotificationManager.IMPORTANCE_LOW)
manager.createNotificationChannel(channel)
val notification = Notification.Builder(applicationContext, "ChannelID").build()
startForeground(0x111, notification)
}
}
之后是Android11之后 官方进一步对安全做了限制,需要再Client的清单文件下 补充queries 否则还是无法绑定服务
加入queries如下
<queries>
<package android:name="需要绑定的服务的包名"/>
</queries>
文章来源:https://blog.csdn.net/g777520/article/details/135080873
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!