Android APP内跨进程广播遇到的问题

Android跨进程通讯,其中有一种方式就是发送广播。java

1. 首先注册接收广播,并设置多进程。android

使用android:process设置多进程。安全

参数值有两种形式,进程名以":"开头属于当前应用的私有进程,其余应用的组件不能和他跑在同一个进程中,不以":"开头的进程属于全局进程,其余应用能够经过sharedUserId方式和它跑在同一个进程中。app

<application>
        <receiver android:name=".service.ConnectionReceiver" android:process=":kaleido">
            <intent-filter>
                <action android:name="com.tools.kaleido.intent.action.CONNECTION" />
            </intent-filter>
        </receiver>
    </application>

2. 发送广播.net

String action = "com.tools.kaleido.intent.action.CONNECTION";
Intent intent = new Intent(action);
sendBroadcast(intent);

正常状况,这种就能够实现启动多进程的广播。code

但我遇到过2种状况xml

1、使用permission的状况blog

1. 若是设置了permission,必须设置protectionLevel,不然没法启动进程

<!-- 声明权限 -->
    <permission android:name="com.tools.kaleido.permission.CONNECTION" android:protectionLevel="signature"/>
    <!-- 使用指定的权限 -->
    <uses-permission android:name="com.tools.kaleido.permission.CONNECTION"/>

    <application>
        <receiver android:name=".service.ConnectionReceiver" android:process=":kaleido">
            <intent-filter>
                <action android:name="com.tools.kaleido.intent.action.CONNECTION" />
            </intent-filter>
        </receiver>
    </application>

2. 启动广播时,添加权限io

String action = "com.tools.kaleido.intent.action.CONNECTION";
Intent intent = new Intent(action);
sendBroadcast(intent, "com.tools.kaleido.permission.CONNECTION");

2、在部分手机上,仍是没法启动

须要到安全中心把App的自启动权限开启,或者华为的手机管家里把App的自启动权限开启。

 

能够参考:

Android 8.0行为变动: https://developer.android.com/about/versions/oreo/android-8.0-changes

https://my.oschina.net/android520/blog/2218898

相关文章
相关标签/搜索