android 从一个app跳到另一个app

10 篇文章 0 订阅

下面是自己写的一个简单例子,就是获取到手机上所有应用的包名,然后ListView展示出来,并通过ListView的Item触发事件来实现跳转到其它app的功能。

public class AndroidJump extends Activity{
private Button b1;
private List<PackageInfo> pkinfoList=null;
private List<String> appNamelist;
private ListView lv;
private ArrayAdapter<String> adapter;
private Context context;
private PackageManager pm=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jump);
appNamelist = new ArrayList<String>();

context = getApplicationContext();
b1 = (Button) findViewById(R.id.jumpinto_otherapp);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pm = context.getPackageManager();
pkinfoList = pm.getInstalledPackages(0);
for(PackageInfo pif:pkinfoList){
String name =  pif.applicationInfo.loadLabel(pm).toString();
appNamelist.add(name);
}
adapter.notifyDataSetChanged();

}
});

lv = (ListView) findViewById(R.id.lv);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,appNamelist);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String name = (String)((ListView)arg0).getItemAtPosition(arg2);
for(PackageInfo pif:pkinfoList){
if(name.equals(pif.applicationInfo.loadLabel(pm).toString())){
startAPP(pif.packageName);
}
}
}
});
}

private void startAPP(String appPackageName){  
// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等  
   PackageInfo packageinfo = null;  
   try {  
       packageinfo = getPackageManager().getPackageInfo(appPackageName, 0);  
   } catch (NameNotFoundException e) {  
    Log.d("HelloWorld", appPackageName+" Exception:"+e);
    e.printStackTrace();  
   }  
   if (packageinfo == null) {  
       return;  
   }  
 
   // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent  
   Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);  
   resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
   resolveIntent.setPackage(packageinfo.packageName);  
 
   // 通过getPackageManager()的queryIntentActivities方法遍历  
   List<ResolveInfo> resolveinfoList = getPackageManager()  
           .queryIntentActivities(resolveIntent, 0);  
 
   ResolveInfo resolveinfo = resolveinfoList.iterator().next();  
   if (resolveinfo != null) {  
       // packagename = 参数packname  
       String packageName = resolveinfo.activityInfo.packageName;  
       // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]  
       String className = resolveinfo.activityInfo.name;  
       // LAUNCHER Intent  
       Intent intent = new Intent(Intent.ACTION_MAIN);  
       intent.addCategory(Intent.CATEGORY_LAUNCHER);  
 
       // 设置ComponentName参数1:packagename参数2:MainActivity路径  
       ComponentName cn = new ComponentName(packageName, className);  
 
       intent.setComponent(cn);  
       startActivity(intent); 
  
   } 
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值