android 兩個應用相互呼叫
阿新 • • 發佈:2018-11-19
個人總結兩個應用相互呼叫:
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);
- 由於動態廣播需要調起的apk需要在 後臺執行著,不做展示了
- 使用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>