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

之前看到网上说需要获取包名和类名,然后通过  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. C语言动态内存管理

    1-概述 动态存储管理的基本问题是:系统如何按请求分配内存,如何回收内存再利用.提出请求的用户可能是系统的一个作业,也可能是程序中的一个变量. 空闲块 未曾分配的地址连续的内存区称为“空闲块”. 占用 ...

  2. Android开发之PendingIntent的使用

    PendingIntent,待确定的意图,等待的意图 官网链接:http://developer.android.com/reference/android/app/PendingIntent.htm ...

  3. 逻辑运算符&& 用法解释

    A&&B 首先判断A,A成功然后判断B:A不成功则结束判断,返回false;

  4. 结构体 fseg_inode_t;

    typedef byte fseg_inode_t;

  5. WordPress Backdoor未授权访问漏洞和信息泄露漏洞

    漏洞名称: WordPress Backdoor未授权访问漏洞和信息泄露漏洞 CNNVD编号: CNNVD-201312-497 发布时间: 2013-12-27 更新时间: 2013-12-27 危 ...

  6. ArchLinux安装开源VMware Tools

    首先按照传统的Linux下安装VMware Tools的方法[1]]出现了很多的错误,安装过程完全没有办法进行下去.我在ArchLinux Wiki中看到这样一句说:VMware Tools for ...

  7. 【转】centos 6.4 samba 安装配置

    关掉防火墙     service iptables stop  chkconfig iptables off (永久关闭防火墙) 关闭SELinux vi /etc/sysconfig/selinu ...

  8. QT学习(对话框)codeblock版本

    参考: http://www.cnblogs.com/JohnShao/archive/2011/09/26/2191627.html http://www.cnblogs.com/xiao-chen ...

  9. 【原】日志处理-Spark

    日志信息如下所示: 1.1.1.1 - - [21/Jul/2014:10:00:00 -0800] "GET /majihua/article/284234 HTTP/1.1"  ...

  10. 2013 ACM区域赛长沙 I LIKE vs CANDLE(ZOJ3734) 很好的一道树形DP

    题意:一棵有根树,每个节点都有一个value值和属性(zan或是 CANDLE).你可以通过反转一些点的属性,反转一个点时候,它的整个子树都会被反转属性.有些点反转消耗代价为X,有些为Y.你的目标的是 ...