Android中 一个应用启动另外一个应用一般有2种情况,被启动应用的包名已知和未知两种情况:

*情况一 ==》已知包名通常有两种方法:

方法一:

[java]

/**启动另外应用的代码,其中被启动的应用的包名为org.hy,应用的入口为org.hy.Test222Activity,此方法的2个应用的AndroidManifest.xml文件都不需要修改**/
Intent intent = new Intent();
intent.setComponent(new ComponentName("org.hy","org.hy.Test222Activity"));
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);

方法二:

[java]

/**启动另外应用的代码,其中被启动应用的action为org.hy.test222(自己随便定义),此方法的被启动的应用的AndroidManifest.xml要做修改**/
Intent intent = new Intent();
intent.setAction("org.hy.test222");
startActivity(intent);

[html]

/**被启动应用的AndroidManifest.xml**/
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=" http://schemas.android.com/apk/res/android"
package="org.hy"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Test222Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="org.hy.test222"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

</application>
</manifest>

方法二中 AndroidManifest.xml中category设置为android.intent.category.DEFAULT的情况是当Intent启动的时候没有明确指定启动哪个antivit时候就要这样设置。

*情况二 ==》未知包名:
这种情况虽然是不知道应用的包名,但是最终启动应用还是通过包名启动。所以要通过一种方法获得手机内应用的包名。
手机内分 系统预装应用和非系统自己安装的应用,可以通过下边的方法判断,返回一个包名的List集合:
[java]

/**获得手机内应用的包名,返回一个List集合**/
public List<PackageInfo> getAllApps() {
List<PackageInfo> apps = new ArrayList<PackageInfo>();
PackageManager packageManager = this.getPackageManager();
//获取手机内所有应用
List<PackageInfo> paklist = pManager.getInstalledPackages(0);
for (int i = 0; i < paklist.size(); i++) {
PackageInfo pak = (PackageInfo) paklist.get(i);
//判断是否为非系统预装的应用 (大于0为系统预装应用,小于等于0为非系统应用)
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
apps.add(pak);
}
}
return apps;
}

获得包名后,就可以通过获得要启动的包名启动应用了
[java]

public void launchApp() {
PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packages = getAllApps();
PackageInfo pa = null;
for(int i=0;i<packages.size();i++){
pa = packages.get(i);
//获得应用名
String appLabel = packageManager.getApplicationLabel(pa.applicationInfo).toString();
//获得包名
String appPackage = pa.packageName;
Log.d(""+i, appLabel+" "+appPackage);
}
Intent intent = packageManager.getLaunchIntentForPackage("jp.co.johospace.jorte");//"jp.co.johospace.jorte"就是我们获得要启动应用的包名
startActivity(intent);
}


更多相关文章

  1. Android高频面试专题 - 基础篇(一)Activity
  2. 常用控件的使用方法(参考书籍'第一行代码')
  3. Android-webview和js脚本语言交互的时候怎么获取js方法的返回值
  4. android播放音乐的三种方法实现
  5. Android日志系统第三方库------Logger
  6. Android中显示html标签或者带图片
  7. Android(安卓)Canvas绘图抗锯齿解决方法
  8. android 属性系统代码分析
  9. Android(安卓)ContentProvider和Uri详解

随机推荐

  1. 图文列表和课程表
  2. 表单、内联框架及css练习
  3. html中做图片,链接,列表,图文列表 及一个
  4. 注册页面和后台
  5. 图片、链接、列表及表格标签的学习与运用
  6. 登录表单、后台架构、样式来源与优先级
  7. 图片/链接/列表/表格-简单写法
  8. 简单的后台框架
  9. HTML标签的使用
  10. 表单+简单后台架构+元素样式来源与优先级