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

之前看到网上说需要获取包名和类名,然后通过  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. Emberjs View and Route

    index.html <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset=& ...

  2. Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-061 发布时间: 2013-11-07 更新时 ...

  3. P.V操作【转】

    阐述P,V原语的理论不得不提到的一个人便是赫赫有名的荷兰科学家 E.W.Dijkstra.如果你对这位科学家没有什么印象的话,提起解决图论中最短路径问题的Dijkstra算法应当是我们再熟悉不过的了. ...

  4. Lua中实现队列(高效方式)

    转自http://www.cnblogs.com/stephen-liu74/archive/2012/06/25/2417894.html 在Lua中实现队列的简单方法是使用table库函数inse ...

  5. linux获取目录下文件

    查看当前目录下的文件: find . -type f 查看当前目录下的文件夹: find . -type d 如果文件file1不为空: if [ -s file1 ];then      echo  ...

  6. md5可能会被破解咋办?

    所谓加Salt,就是加点“佐料”.其基本想法是这样的——当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列.而当用户登录时,系统为用户提供的代码撒上同样的“佐料”, ...

  7. chmod chgrp chown

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...

  8. 【原创】一个复制本地文件到Hadoop文件系统的实例

    import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net ...

  9. ssl error rx record too long

  10. WPF布局系统[转]

    转自:http://www.cnblogs.com/niyw/archive/2010/10/31/1863908.html前言 前段时间忙了一阵子Google Earth,这周又忙了一阵子架构师论文 ...