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

相關文章
相關標籤/搜索