android 程序打开第三方程序

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

之前看到网上说需要获取包名和类名,然后通过  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);
}
}

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

上一篇:[转]oracle 11g 忘记 默认用户密码


下一篇:java设计模式—Adapter模式