在開發(fā)項(xiàng)目中會(huì)遇到這樣的需求胚吁,通過一個(gè)應(yīng)用啟動(dòng)另外一個(gè)應(yīng)用或者打開另一個(gè)應(yīng)用的某個(gè)Activity延窜。雖然說我還沒遇到過,但突然想到這個(gè)問題腺办,就自己寫了個(gè)Demo測(cè)試了一下焰手,在這里做一下簡(jiǎn)單總結(jié)。
1怀喉、通過APP啟動(dòng)另一個(gè)APP
直接上代碼书妻,
PackageManager packageManager = getPackageManager();
if (checkPackInfo(packname)) {
Intent intent = packageManager.getLaunchIntentForPackage(packname);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "沒有安裝" + packname, 1).show();
}
/**
* 檢查包是否存在
*
* @param packname
* @return
*/
private boolean checkPackInfo(String packname) {
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(packname, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return packageInfo != null;
}
如果手機(jī)上已經(jīng)安裝了另一個(gè)APP直接就能夠打開了。
2躬拢、打開另一個(gè)APP指定的Activity
Intent intent = new Intent();
//第一種方式
ComponentName cn = new ComponentName("com.example.fm", "com.example.fm.MainFragmentActivity");
try {
intent.setComponent(cn);
//第二種方式
//intent.setClassName("com.example.fm", "com.example.fm.MainFragmentActivity");
intent.putExtra("test", "intent1");
startActivity(intent);
} catch (Exception e) {
//TODO 可以在這里提示用戶沒有安裝應(yīng)用或找不到指定Activity驻子,或者是做其他的操作
}
這里有兩點(diǎn)需要注意
1、需要將目標(biāo)Activity的android:exported="true"屬性在所屬應(yīng)用AndroidMainfest里設(shè)置為true估灿,意思是當(dāng)前Activity可以被外部應(yīng)用訪問,否則會(huì)報(bào)下面的錯(cuò)誤
Caused by: java.lang.SecurityException: Permission Denial: starting Intent
{ cmp=com.example.fm/.MainFragmentActivity (has extras) } from ProcessRecord
{39282a97 11545:com.xing.toolbardemo1/u0a71} (pid=11545, uid=10071) not exported from uid 10067
2缤剧、需要在當(dāng)前應(yīng)用的AndroidMainfest里也聲明目標(biāo)Activity馅袁,否則會(huì)報(bào)下面的錯(cuò)誤
(5.0以后好像不會(huì)有這個(gè)錯(cuò),我用的了兩個(gè)5.0一下的測(cè)試機(jī)都報(bào)錯(cuò)了)
Caused by: android.content.ActivityNotFoundException: Unable to find
explicit activity class {com.example.fm/com.example.fm.MainFragmentActivity};
have you declared this activity in your AndroidManifest.xml?
在清單文件里聲明目標(biāo)Activity就OK了
<activity android:name="com.example.fm.MainFragmentActivity"></activity>
這樣我們就實(shí)現(xiàn)了通過一個(gè)APP打開另一個(gè)APP的功能啦荒辕。