因为在开发过程中需要开启扫描第三方程序,并且点击启动的效果,所以对这个功能进行了实现,并且分享出来个大家。

之前看到网上说需要获取包名和类名,然后通过  intent 才能打开这个程序,其实不必要这样。

在android API中,有这么一个接口,

Intent android.content.pm.
PackageManager.getLaunchIntentForPackage(

String packageName)

实际说的就是传入包名即可返回Intent,继而startActivity 即可打开第三方程序了。

以下是Demo:

界面 GetApplicationActivity.

public class GetApplicationActivity extends Activity implements
OnItemClickListener { private GetApplicationAdpater mGetApplicationAdpater;
private ArrayList<ApplicationData> applicationDatas;
private ArrayList<ApplicationData> tempApplicationDatas;
private ListView mListView;
private PackageManager mPackageManager;
private static final int Refresh_List_View = 0x001; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.application_list);
initData();
}
private void initData() {
applicationDatas = new ArrayList<ApplicationData>();
tempApplicationDatas = new ArrayList<ApplicationData>();
mGetApplicationAdpater = new GetApplicationAdpater(this,
applicationDatas);
mListView.setAdapter(mGetApplicationAdpater);
mListView.setOnItemClickListener(this);
getData();
mPackageManager = getPackageManager();
} private void getData() {
GetApplicationAsyncTask mGetApplicationAsyncTask = new GetApplicationAsyncTask();
mGetApplicationAsyncTask.getApplicationList(this,
new GetApplicationList() {
@Override
public void dataCallback(
ArrayList<ApplicationData> applicationDatas) {
if (applicationDatas != null) {
tempApplicationDatas = applicationDatas;
}
mHandler.sendEmptyMessage(Refresh_List_View);
} });
} private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case Refresh_List_View:
int count = tempApplicationDatas.size();
applicationDatas.clear();
for (int i = 0; i < count; i++) {
applicationDatas.add(tempApplicationDatas.get(i));
}
mGetApplicationAdpater.notifyDataSetChanged();
break; default:
break;
}
};
}; @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
String packageName = applicationDatas.get(position).getPackageName();
Intent i = mPackageManager.getLaunchIntentForPackage(packageName);
if (i != null)
startActivity(i);
}
}

java

适配器 GetApplicationAdpater.java

public class GetApplicationAdpater extends BaseAdapter{

	private ArrayList<ApplicationData> applicationDatas;
private LayoutInflater mLayoutInflater; public GetApplicationAdpater(Context context,ArrayList<ApplicationData> applicationDatas) {
super();
this.applicationDatas = applicationDatas;
mLayoutInflater = LayoutInflater.from(context);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return applicationDatas.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return applicationDatas.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mViewHolder;
ApplicationData mApplicationData = applicationDatas
.get(position); if (convertView == null) {
mViewHolder = new ViewHolder();
convertView = mLayoutInflater
.inflate(R.layout.list_item_view, null);
mViewHolder.image = (ImageView) convertView
.findViewById(R.id.image);
mViewHolder.title = (TextView) convertView.findViewById(R.id.title);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
mViewHolder.image.setImageDrawable(mApplicationData.getiCon());
mViewHolder.title.setText(mApplicationData.getAppName());
return convertView;
} public final class ViewHolder {
public ImageView image;
public TextView title;
} }

获取程序包名类 GetApplicationAsyncTask.java

public class GetApplicationAsyncTask extends
AsyncTask<Integer, Integer, String> {
private GetApplicationList mGetApplicationList;
private ArrayList<ApplicationData> applicationDatas;
private Context mContext; @Override
protected String doInBackground(Integer... params) {
PackageManager mPackageManager = mContext.getPackageManager();
List<PackageInfo> packageInfos = mPackageManager
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); 获取程序列表
applicationDatas = new ArrayList<ApplicationData>();
for (PackageInfo packs : packageInfos) {
if((packs.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0) //主要过滤系统的程序
{
ApplicationData mApplicationData= new ApplicationData();
mApplicationData.setiCon(packs.applicationInfo.loadIcon(mPackageManager));
mApplicationData.setAppName(packs.applicationInfo.loadLabel(mPackageManager).toString());
mApplicationData.setPackageName(packs.packageName);
applicationDatas.add(mApplicationData);
}
}
return null;
} @Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
mGetApplicationList.dataCallback(applicationDatas);
} public void getApplicationList(Context context,
GetApplicationList getApplicationList) {
this.mGetApplicationList = getApplicationList;
this.mContext = context;
this.execute();
} public interface GetApplicationList {
public void dataCallback(ArrayList<ApplicationData> applicationDatas);
}
}

代码比较简单,我就不做解释了。

android 程序打开第三方程序的更多相关文章

  1. Android第一次打开应用程序,实现向导界面

    转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/42079167 先说下思路:1.利用Preference存储数据,来记录是否是 ...

  2. Android如何做到应用程序图标隐藏,由第三方程序启动

    在你App的AndroidManifest.xml中,将启动页做如下修改 <intent-filter> <action android:name="android.int ...

  3. 【转】Android 当打开“开发者模式”中的“不保留活动”后,程序应当怎么保持正常运行

    当打开这个设置以后,程序的Activity会自动销毁,每次返回的时候就会不断重oncreate,此时伴随的问题多多. 参考文档:http://www.bubuko.com/infodetail-960 ...

  4. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  5. Android 当打开“开发人员模式”中的“不保留活动”后,程序应当怎么保持正常执行

    Android 当打开"开发人员模式"中的"不保留活动"后,程序应当怎么保持正常执行咧. .? 在这几天,我一直在纠结这个问题.从发现,程序出现这个问题,是由于 ...

  6. android系统中如何通过程序打开某个AccessibilityService

    android系统中如何通过程序打开某个AccessibilityService(系统辅助服务)? 通常的做法是注册AccessibilityService(辅助服务)后跳转到设置启动服务页面引导用户 ...

  7. Android -- 分享功能和打开指定程序

    打开指定程序                                                                                Intent intent ...

  8. Android 打开其他程序

    Intent intent = new Intent(); intent.setComponent(new ComponentName("所要打开的程序包名", "所要打 ...

  9. android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app

    开发中常常有打开本地浏览器加载url或者指定浏览器加载, 还有打开第三方app, 如 打开高德地图 百度地图等 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器. 如果手机 ...

随机推荐

  1. RxJava开发精要8 – 与REST无缝结合-RxJava和Retrofit

    原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...

  2. Android layout_gravity失效的问题

    相信对于Android的初学者来说,大家都曾经被layout里这两个极其相似的属性迷惑过.简单使用一下搜索工具,我们就不难找到下面这样的答案: layout_gravity 表示组件自身在父组件中的位 ...

  3. C# :XML和JSON互转

    我们一般在用JSON或者XML作为数据交换的时候,可能定义一个没有真正意义方法的类,其实就是一个关于属性的数据结构,如果对于这种情况,可以将这个类对象作为中介,然后利用C#提供的序列化和反序列化的方法 ...

  4. 【Quick 3.3】资源脚本加密及热更新(一)脚本加密

    [Quick 3.3]资源脚本加密及热更新(一)脚本加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.脚本加密 quick框架已经封装好加密模块,与加密有关的文件在引擎目录/quic ...

  5. 【原创】MIPS中断系统的板级验证及实例测试

    “五一”假期前后这约五天时间,终于将MIPS中断系统进行了板级验证及实例测试.因为老师给的交叉编译工具不会用,所以测试代码完全用MIPS汇编编写.使用MARS而没有用QtSpim,其实我觉得SPIM这 ...

  6. SSH框架应用中常用Jar包用途介绍

    struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...

  7. .NET程序内,访问私有或者保护成员的技巧

    如果是C++,我们可以计算对象内成员的位置,然后偏移指针以访问类型的所有非公开成员.但是.NET对象完全受GC管理,地址根本无法得到,并且也无法通过指针调用方法. 当然... 这是一种很不值得推荐的技 ...

  8. Apache设置防DDOS模块mod_evasive

    mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块.对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块.虽然并不能完全防御 DDOS攻击,但在一定条件下, ...

  9. linux 已有目录挂载磁盘

    1.查看当前硬盘使用状况: [root@gluster_node1 ~]# df -h Filesystem            Size  Used Avail Use% Mounted on / ...

  10. 1到n数组,和为指定数所有序列问题

    (1)方法一,背包问题解法 #include <iostream> using namespace std; #include <vector> #include <li ...