1. 程式人生 > >android 兩個應用相互呼叫

android 兩個應用相互呼叫

個人總結兩個應用相互呼叫:

   1.靜態廣播
   2.動態廣播
   3.startActiviy
   4.startActiviyForResult(使用packagename)
   5.startActivityForResult(使用Action)

1.靜態廣播調起apk
第一步,在將要調起的apk 中AndroidManifest.xml註冊靜態廣播

 <receiver android:name=".MyStaticBroadcastReceiver"
           android:enabled="true"
           android:exported="true">
           <intent-filter>
                <action android:name="com.example.mydemo.mystaticbroadcastreceiver"/>
           </intent-filter>
        </receiver>

第二步,呼叫的apk中建立廣播接受的類

public class MyStaticBroadcastReceiver  extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {

        Intent intent1 = new Intent(context, MainActivity.class);
        context.startActivity(intent1);
  }
}

3.第三步,所在的apk中傳送靜態廣播

Intent intent = new Intent();
                intent.setAction("com.example.mydemo.mystaticbroadcastreceiver");
                intent.setComponent( new ComponentName( "com.example.mydemo" ,"com.example.mydemo.MyStaticBroadcastReceiver") );
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent. FLAG_INCLUDE_STOPPED_PACKAGES);
                sendBroadcast(intent);
  1. 由於動態廣播需要調起的apk需要在 後臺執行著,不做展示了
  2. 使用startActivity方法調起apk
    需要找到調起apk的包名,在使用startActivity即可
  Intent intent2 = new Intent();
                ComponentName componentName = new ComponentName("com.example.mydemo", "com.example.mydemo.MainActivity");
                intent2.setComponent(componentName);
                startActivity(intent2);

4.使用startActivityForResult 方法(利用包名),調起apk,回傳資料
第一步,同startActivity一樣

 Intent intent3 = new Intent();
                ComponentName componentName3 = new ComponentName("com.example.mydemo", "com.example.mydemo.MainActivity");
                intent3.setComponent(componentName3);
                intent3.putExtra("BS","3");
                startActivityForResult(intent3,0);
                

第二步,在調起的apk中接受並且回傳資料

             Intent intent0 =getIntent();
             String  bs = intent0.getStringExtra("BS");
             Intent intent = new Intent();
                      intent.putExtra("xxx","123");
                      setResult(1,intent);
                      finish();

第三步,接受回傳的資料

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       if(requestCode==0||resultCode==1)
       {
           String xxx = data.getStringExtra("xxx");
           Toast.makeText(getApplication(),"回傳的值P---"+xxx,Toast.LENGTH_SHORT).show();
       }

 }

5.使用startActivityForResult 方法(利用Action),調起apk,回傳資料

和使用包名相同,在不知道包名類名的情況下使用ation,被調起的apk需要新增 aciton

Intent intent4 = new Intent();
                intent4.setAction("android.intent.action.demo");
                intent4.putExtra("BS","4");
                startActivityForResult(intent4,2);

在被調起的apk中的AndroidManifest.xml的Acitivity下面新增aciton,其他的和利用包名的都一樣

 <intent-filter>
                <action android:name="android.intent.action.demo" />
                <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>

程式碼地址:https://github.com/yanghong666/MyProject