开发Launcher与其它的应用差不多
- 创建Launcher工程
- 展示所有的应用
点击图标实现跳转
创建Launcher工程
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.HOME"/>
如图:
初始化ResolveInfo
mPackageManager = getPackageManager();
//配置<intent-filter>的信息,这里主要是用到了过滤
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
//得到ResolveInfo对象,PackageManager.MATCH_DEFAULT_ONLY的意思是只查询过滤器中是CATEGORY_LAUNCHER
//的条目;
mResolveInfos = mPackageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
在Gridview中展示应用图标以及名称
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (null == convertView) {
holder = new ViewHolder();
convertView = LayoutInflater.from(getApplicationContext()).
inflate(R.layout.lancher_main, parent, false);
holder.mImageView = (ImageView) convertView.findViewById(R.id.image_view);
holder.mTextView = (TextView) convertView.findViewById(R.id.text_view);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ResolveInfo resolveInfo = mResolveInfos.get(position);
holder.mTextView.setText(resolveInfo.loadLabel(mPackageManager).toString());
holder.mImageView.setImageDrawable(resolveInfo.activityInfo.loadIcon(mPackageManager));
return convertView;
}
}
private class ViewHolder {
TextView mTextView;
ImageView mImageView;
}
获得点击事件进行应用跳转
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ResolveInfo resolveInfo = mResolveInfos.get(position);
String packageName = resolveInfo.activityInfo.packageName;
String name = resolveInfo.activityInfo.name;
Intent intent = new Intent();
//用于打开其它应用的activity或service
ComponentName componentName = new ComponentName(packageName, name);
intent.setComponent(componentName);
startActivity(intent);
}