0
点赞
收藏
分享

微信扫一扫

Android中在一个应用中去启动另外一个应用


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);    
   
        }

举报

相关推荐

0 条评论