美文网首页
解决targetSdk>30 bindService()返回f

解决targetSdk>30 bindService()返回f

作者: 小O机 | 来源:发表于2022-10-17 19:01 被阅读0次

问题:在使用aidl进行跨进程通信的时候,通过bindService()绑定远程service,但一直返回false

// AndroidManifest.xml
<application
        ...
    <service
        android:name=".service.MyService"
        android:enabled="true"
        android:exported="true">

        <intent-filter>
            <action android:name="com.benny.bind" />
        </intent-filter>
    </service>
        ...
</application>
// Client
bindService(Intent().apply {
            component = ComponentName("com.benny.app.a", "com.benny.app.a.service.MyService")
        }, object : ServiceConnection {
            override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
                Log.d(TAG, "onServiceConnected")
                IMyAidlInterface.Stub.asInterface(service).setUIType(111)
            }

            override fun onServiceDisconnected(name: ComponentName?) {
                Log.d(TAG, "onServiceDisconnected")
            }
        }, Context.BIND_AUTO_CREATE).let {
            Log.d(TAG, "bindService: $it")
        }

2022-10-18 18:34:23.264 15569-15569/com.benny.app.b D/ZP: bindService: false

原因:Google在API30以后加强了包可见性限制,如果需要跨进程访问某个应用,需要在AndroidManifest中声明要访问的应用。详情参考https://developer.android.google.cn/guide/topics/manifest/queries-element?hl=en--

解决方案:

第一种方案:
修改client targetSdk版本到30以下。
第二种方案:
targetSdk版本在30以上,在AndroidManifest中,按照Google要求需要在Client注册需要使用的包名。

// AndroidManifest.xml

<queries>
    <!--如果想要与其他的应用进行AIDL通信的话,需要在这里注册包名的信息-->
    <!--谷歌的文档说明 https://developer.android.google.cn/guide/topics/manifest/queries-element?hl=en-->
    <package android:name="com.benny.app.a" />
</queries>
<application
        ...
    <service
        android:name=".service.MyService"
        android:enabled="true"
        android:exported="true">

        <intent-filter>
            <action android:name="com.benny.bind" />
        </intent-filter>
    </service>
        ...
</application>

相关文章

网友评论

      本文标题:解决targetSdk>30 bindService()返回f

      本文链接:https://www.haomeiwen.com/subject/rvlszrtx.html