android 程序打开第三方程序
因为在开发过程中需要开启扫描第三方程序,并且点击启动的效果,所以对这个功能进行了实现,并且分享出来个大家。
之前看到网上说需要获取包名和类名,然后通过 intent 才能打开这个程序,其实不必要这样。
在android API中,有这么一个接口,
实际说的就是传入包名即可返回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 程序打开第三方程序的更多相关文章
- Android第一次打开应用程序,实现向导界面
转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/42079167 先说下思路:1.利用Preference存储数据,来记录是否是 ...
- Android如何做到应用程序图标隐藏,由第三方程序启动
在你App的AndroidManifest.xml中,将启动页做如下修改 <intent-filter> <action android:name="android.int ...
- 【转】Android 当打开“开发者模式”中的“不保留活动”后,程序应当怎么保持正常运行
当打开这个设置以后,程序的Activity会自动销毁,每次返回的时候就会不断重oncreate,此时伴随的问题多多. 参考文档:http://www.bubuko.com/infodetail-960 ...
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...
- Android 当打开“开发人员模式”中的“不保留活动”后,程序应当怎么保持正常执行
Android 当打开"开发人员模式"中的"不保留活动"后,程序应当怎么保持正常执行咧. .? 在这几天,我一直在纠结这个问题.从发现,程序出现这个问题,是由于 ...
- android系统中如何通过程序打开某个AccessibilityService
android系统中如何通过程序打开某个AccessibilityService(系统辅助服务)? 通常的做法是注册AccessibilityService(辅助服务)后跳转到设置启动服务页面引导用户 ...
- Android -- 分享功能和打开指定程序
打开指定程序 Intent intent ...
- Android 打开其他程序
Intent intent = new Intent(); intent.setComponent(new ComponentName("所要打开的程序包名", "所要打 ...
- android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app
开发中常常有打开本地浏览器加载url或者指定浏览器加载, 还有打开第三方app, 如 打开高德地图 百度地图等 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器. 如果手机 ...
随机推荐
- Yii 实现restful
首先做一下接口的 URL 规划,假设我们要面对的资源是 item ,现在我们暴露5个接口供其他应用调用,分别是: 对于所有 item 列表调用: GET /rest/item 对于某个 item 信息 ...
- .Net中C#的DllImport的用法
大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功 ...
- APP-FND-01706: Error Updating TABLE_NAME In FND_DOCUMENT_SEQUENCES (文档 ID 338026.1)
In this Document Symptoms Cause Solution Applies to: Oracle Order Management - Version 11.5.10.0 and ...
- hadoop异常: 到目前为止解决的最牛逼的一个异常(java.io.IOException: Incompatible clusterIDs)
(注意: 本人用的版本为hadoop2.2.0, 旧的版本和此版本的解决方法不同) 异常为: 9 (storage id DS-2102177634-172.16.102.203-50010-1384 ...
- 登陆与注册以及Session
Session 保存状态是在 登陆窗口 检查用户密码的动作上执行 .Models namespace 注册与登陆以及Session.Models { public class UserBF { p ...
- c#基础这些你都看过吗?(一)-----仅供初学者使用
1.注释(不写注释是流氓,名字瞎起是扯淡)‘///’一般用于注释函数,注释类.2.快捷键ctrl+k+d(有语法错误无法进行对齐)ctrl+j(快速弹出只能提示)shift+end,shift+hom ...
- [Uva 11825] Hackers’ Crackdown
Hackers’ Crackdown Input: Standard Input Output: Standard Output Miracle Corporations has a numbe ...
- oracle rac scan ip 用途 原理
Oracle 11G R2 RAC增加了scan ip功能,在11.2之前,client链接数据库的时候要用vip,假如你的cluster有4个节点,那么客户端的tnsnames.ora中就对应有四个 ...
- HDU 4799 LIKE vs CANDLE 树形dp
题意:有n个人,他们的关系,形成一棵有根树(0是树根,代表管理员),每个人有一个价值 现在有一条微博,每个人要么点赞,要么送一个蜡烛 初始一些人利用bug反转了某些人的操作(赞变蜡烛 或者 蜡烛变成赞 ...
- html input设置为只读属性
有两种方式可以实现input的只读效果:disabled 和 readonly. 自然两种出来的效果都是只能读取不能编辑,可是两者有很大不同. Disabled说明该input无效,及其value不会 ...