两个应用同时存在的情况处理

1.应用场景:对于我们自己开发的两个应用程序,一个应用程序的包名为aa.bb.cc,软件名叫a,它的入口Activity为aaActivity(入口activity就是在AndroidManifest.xml中标签——<actionandroid:name="android.intent.action.MAIN"/>所在的activity,说白了,就是打开应用程序,第一个显示的activity),另一个应用程序的包名为xx.yy.zz,软件名叫x,它的入口Activity为xxActivity。

网上的通用做法如下(这里我假设a中有一个Button,这个Button的onclick事件中的代码如下):

ComponentNamecomponentName=newComponentName("xx.yy.zz","xx.yy.zz.xxActivity");

Intentintent=newIntent();

intent.setComponent(componentName);

intent.setAction(Intent.ACTION_VIEW);

startActivity(intent);

这种方法对于调用我们自己写的应用程序没有问题,但是如果你想调用别人的应用程序(例如:你写了一个游戏管理的软件,需要管理很多游戏,但是游戏不是你写的,你是得不到入口activity的,你怎么办?),解决办法如下:

通过PackageManager可以得到PackageInfo,通过PackageInfo就可以得到你手机上安装的应用的包名(这个很简单,网上有的是,不赘述)。关键是下一步,代码如下(也是a应用中Button的onclick中的代码):

PackageManagerpackageManager=Start_RemoveSoftActivity.this.getPackageManager();

Intentintent=newIntent();

try{

intent=packageManager.getLaunchIntentForPackage("要调用应用的包名");

}catch(NameNotFoundExceptione){

Log.i(TAG,e.toString());

}

startActivity(intent);

其中,"要调用应用的包名"为通过PackageInfo得到的想要启动的应用的包名。这样,我们就可以不知道别人应用源码的情况下,也可以调用别人的应用程序。

3.通过代码在应用中安装已有的APK

需要将apk拷贝至shared_prefs文件夹下

(Eclipse下工具栏window-->showview-->other-->Android-->FileExplorer,

也许打开的FileExplorer为空白,这个你肯定忘了先运行下面代码构成的工程。出现目录后找到data/data/工程包名/shared_prefs,ok)

publicclassAPKTestextendsActivity

{

privateSharedPreferencesmetafer=null;

ApplicationInfomAppInfo=null;

publicvoidonCreate(BundlesavedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//apk安装或卸载路径

StringinstallPath="/data/data/com.hyz/shared_prefs/matchmusic.apk";

//新建shared_prefs文件夹

mkShared_prefs();

//安装apk

installApk(installPath);

//卸载apk

dumpApk(installPath);

}

publicvoiddumpApk(Stringpath)

{

ApplicationInfomAppInfo=null;

PackageManagerpm=getApplicationContext().getPackageManager();

PackageInfoinfo=pm.getPackageArchiveInfo(path,PackageManager.GET_ACTIVITIES);

if(info!=null)

{

mAppInfo=info.applicationInfo;

}

Uriuri=Uri.fromParts("package",mAppInfo.packageName,null);

Intentit=newIntent(Intent.ACTION_DELETE,uri);

startActivity(it);

}

publicvoidinstallApk(Stringpath)

{

Intentret=newIntent();

ret.setDataAndType(Uri.fromFile(newFile(path)),"application/vnd.android.package-archive");

ret.setAction(Intent.ACTION_VIEW);

startActivity(ret);

}

publicvoidmkShared_prefs()

{

if(metafer==null)

{

//metafer=getSharedPreferences("Vdmc",0);

metafer=PreferenceManager.getDefaultSharedPreferences(this);

}

SharedPreferences.Editoreditor=metafer.edit();

//editor.putString("IMSI","");

editor.commit();

}

}

apk

相关推荐