AndroidがサードパーティのApp Activityを呼び出す


App AでApp BのActivity 1を呼び出す.両方の構成が必要です.
(1)App Bは、Activity 1が外部に見えるか、起動可能なActivityであることを示す.
AndroidManifestでxmlファイルで対応する変更を行います
<activity
    android:name=".Activity1"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>//     Activity
        intent-filter>
activity>

または
<activity
    android:name=".ui.ScanActivity"
        android:screenOrientation="portrait"
        android:exported="true">//      
activity>

関連声明をしないで、直接外部から呼び出すと、エラーが発生します.
FATAL EXCEPTION: main
Process: com.breakloop.openAppBActivity, PID: 10700
java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.demo.app/.Activity1 } from ProcessRecord{1d7d3fd 10700:com.breakloop.opencep/u0a138} (pid=10700, uid=10138) not exported from uid 11385

(2)App AはApp Bのpackage Nameを知る.もちろん、App BのActivity 1がアプリ起動の優先エントリActivityではない場合、すなわち「android.intent.category.LAUNCHER」属性がない場合は、Activity 1の名前も知る必要があります.
String mPackageName="com.demo.app";
String mActivityName="com.demo.app.Activity1";
Intent intent=new Intent();
intent.setComponent(new ComponentName(mPackageName,mActivityName));
startActivityForResult(intent,1);

ここにandroidを添付します.intent.action.MAINとandroidintent.category.LAUNCHERの簡単な理解.
(a)android.intent.action.MAINは、このActivityがアプリの入り口として起動できることを示しています.1つのAPPには、複数のエントリ、例えば、微信のメインインタフェース(ユーザーがクリックしてアクセスする)、および微信の支払いインタフェース(サードパーティがアクセスを呼び出す)があります.
(b)android.intent.category.LAUNCHERは、このActivityがデスクトップに表示できることを示しています(APPアイコンをクリックしてトリガーされたActivity)
2つのアトリビュートに興味がある場合は、ブロガーLindroyの記事を参照してください.このうち,この2つの属性について構成実験を行った.http://blog.csdn.net/lindroid20/article/details/51993247