android 调用本地第三方应用软件,如qq、微信、微博和视频播放器等

在做Android开发的过程中有很多时候要调用第三方的软件来辅助自己的软件完成相应的功能,比如在一个软件中调用QQ或者微信来进行聊天,或者是调用第三方的视频软件来视频播放等。。。经过查找资料有很多资料是通过 调用第三方应用的两个参数,应用的包名和类名才能调用打开第三方程序。例如下面这样

ComponentName componentName = new ComponentName(pkg, cls);  
Intent intent = new Intent();  
intent.setComponent(componentName);  
startActivity(intent);  

直接设置pkg和cls这样也可以打开第三方应用,首先你要知道你要调用的软件的包名和类名,不知道的话就根本没办法,我在开发过程中需要调用QQ来进行相互之间的联系,在其中一个手机上是可以运行的,但是将这个软件安装在另一个手机上的时候打开过程中就会出错,经过一段时间的查找问题才发现是QQ版本上的问题,其中的一个版本很老,包名和类名都跟现在的不一样。

所以在这里我推荐用下面的方法调用第三方应用,通过查找手机内所有软件的包名和类名,将其保存,然后通过查找匹配包名中的关键字调用第三方软件。


得到包名后就可以根据包名来调用第三方软件了。下面进入正题:

布局文件,两个按键,一个打开QQ和一个打开微信:

实现类

MainActivity.java

package cn.edu.cqu.openqqweixin;import java.util.Collections;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {private Button qqButton;private Button weixinButton;private PackageManager mPackageManager;private List mAllApps;private String input;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);qqButton = (Button) findViewById(R.id.qqButton);weixinButton = (Button) findViewById(R.id.weixinButton);qqButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubinput = "qq";openApp(input);}});weixinButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubinput = "mm";openApp(input);}});}private void openApp(String str){//应用过滤条件Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);System.out.println("testrrr");mPackageManager = this.getPackageManager();System.out.println("tesr");mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);//按报名排序Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));for(ResolveInfo res : mAllApps){//该应用的包名和主ActivityString pkg = res.activityInfo.packageName;String cls = res.activityInfo.name;System.out.println("pkg---" +pkg);// System.out.println("打印出来的----" + str);// 打开QQ pkg中包含"qq",打开微信,pkg中包含"mm"if(pkg.contains(str)){ComponentName componet = new ComponentName(pkg, cls);Intent intent = new Intent();intent.setComponent(componet);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);this.startActivity(intent);}}}
}
程序中设置了一个 String类型input,通过设置input可以打开不同的应用程序。



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部