Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1072376
  • 博文数量: 403
  • 博客积分: 10272
  • 博客等级: 上将
  • 技术积分: 4407
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:22
文章分类

全部博文(403)

文章存档

2012年(403)

分类: 嵌入式

2012-03-12 18:41:29

  1. Android中 一个应用启动另外一个应用一般有2种情况,被启动应用的包名已知和未知两种情况:  
  2.   
  3. *情况一 ==》已知包名通常有两种方法:  
  4.   
  5. 方法一:  
  6.   
  7. [java] view plaincopyprint?  
  8.   
  9.     /**启动另外应用的代码,其中被启动的应用的包名为org.hy,应用的入口为org.hy.Test222Activity,此方法的2个应用的AndroidManifest.xml文件都不需要修改**/    
  10.     Intent intent = new Intent();    
  11.     intent.setComponent(new ComponentName("org.hy","org.hy.Test222Activity"));    
  12.     intent.setAction(Intent.ACTION_VIEW);    
  13.     startActivity(intent);    
  14.   
  15. 方法二:  
  16.   
  17. [java] view plaincopyprint?  
  18.   
  19.     /**启动另外应用的代码,其中被启动应用的action为org.hy.test222(自己随便定义),此方法的被启动的应用的AndroidManifest.xml要做修改**/    
  20.     Intent intent = new Intent();    
  21.     intent.setAction("org.hy.test222");    
  22.     startActivity(intent);    
  23.   
  24. [html] view plaincopyprint?  
  25.   
  26.     /**被启动应用的AndroidManifest.xml**/    
  27.     xml version="1.0" encoding="utf-8"?>    
  28.     <manifest xmlns:android=""    
  29.           package="org.hy"    
  30.           android:versionCode="1"    
  31.           android:versionName="1.0">    
  32.         <uses-sdk android:minSdkVersion="10" />    
  33.         
  34.         <application android:icon="@drawable/icon" android:label="@string/app_name">    
  35.             <activity android:name=".Test222Activity"    
  36.                       android:label="@string/app_name">    
  37.                 <intent-filter>    
  38.                     <action  android:name="org.hy.test222"/>    
  39.                     <action android:name="android.intent.action.MAIN" />    
  40.                     <category android:name="android.intent.category.DEFAULT" />    
  41.                 intent-filter>    
  42.             activity>    
  43.         
  44.         application>    
  45.     manifest>    
  46.   
  47. 方法二中AndroidManifest.xml中category设置为android.intent.category.DEFAULT的情况是当Intent启动的时候没有明确指定启动哪个antivit时候就要这样设置。  
  48.   
  49. *情况二 ==》未知包名:  
  50. 这种情况虽然是不知道应用的包名,但是最终启动应用还是通过包名启动。所以要通过一种方法获得手机内应用的包名。  
  51. 手机内分系统预装应用和非系统自己安装的应用,可以通过下边的方法判断,返回一个包名的List集合:  
  52. [java] view plaincopyprint?  
  53.   
  54.     /**获得手机内应用的包名,返回一个List集合**/    
  55.     public List<PackageInfo> getAllApps() {      
  56.             List<PackageInfo> apps = new ArrayList<PackageInfo>();      
  57.             PackageManager packageManager = this.getPackageManager();      
  58.             //获取手机内所有应用      
  59.             List<PackageInfo> paklist = pManager.getInstalledPackages(0);      
  60.             for (int i = 0; i < paklist.size(); i++) {      
  61.                 PackageInfo pak = (PackageInfo) paklist.get(i);      
  62.                 //判断是否为非系统预装的应用  (大于0为系统预装应用,小于等于0为非系统应用)    
  63.                 if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {      
  64.                     apps.add(pak);      
  65.                 }      
  66.             }      
  67.             return apps;      
  68.     }    
  69.   
  70. 获得包名后,就可以通过获得要启动的包名启动应用了  
  71. [java] view plaincopyprint?  
  72.   
  73.     public void launchApp() {    
  74.             PackageManager packageManager = this.getPackageManager();    
  75.             List<PackageInfo> packages = getAllApps();    
  76.             PackageInfo pa = null;    
  77.             for(int i=0;i<packages.size();i++){    
  78.                 pa = packages.get(i);    
  79.                 //获得应用名    
  80.                 String appLabel = packageManager.getApplicationLabel(pa.applicationInfo).toString();    
  81.                 //获得包名    
  82.                 String appPackage = pa.packageName;    
  83.                 Log.d(""+i, appLabel+"  "+appPackage);    
  84.             }    
  85.             Intent intent = packageManager.getLaunchIntentForPackage("jp.co.johospace.jorte");//"jp.co.johospace.jorte"就是我们获得要启动应用的包名    
  86.             startActivity(intent);    
  87.         }    

阅读(314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~