Android apk通過intent調用另一個apk

前言

在android中,A apk通過包名(pkg name)和類名(cls name)調用B apk的某個activity,但在實際調用過程中,A apk中調用startActivity時報了如下錯誤:
android.content.ActivityNotFoundException: Unable to find explicit activity class {[pkg name]/[cls name]}; have you declared this activity in your AndroidManifest.xml?
有可能是調用參數寫錯了。

方法

對于被調用的B apk:
需要在android manifest中聲明你的activity名稱,當然這一步是必做的,因為你不聲明的話在B apk內部你也進不去這個activity。此外,需要對被調用的activity設置為導出,也就是這句android:exported="true"。例如:

<manifest
    package="com.company.default">
    <application
        ...
        <activity
            android:name=".DemoActivity"
            android:exported="true" />
        <activity
        ...
    </application>
</manifest>

對于調用者的A apk:
用正確的pkg name和cls name創建一個intent,并通過startActivity()方法啟動B apk中的activity即可。例如:

Intent intent = new Intent();
intent.setClassName("com.company.default", "com.company.default.DemoActivity");
startActivity(intent);

這里要注意,pkg name就是我們在android manifest中聲明的package名稱。cls name是包含包名和文件夾路徑名稱的完整的類名,例如包名為com.company.default,而在包名路徑下,又創建了example文件夾,DemoActivity在example文件夾下,那么cls name為com.company.default.example.DemoActivity,如果只寫了"DemoActivity",就會出現文章開頭提示的ActivityNotFoundException。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容