android launch初探
2742 点击·0 回帖
![]() | ![]() | |
![]() | 1. manifest: 需要加上这两个category: <category Android:name="Android.intent.category.DEFAULT" /> <category Android:name="Android.intent.category.HOME" /> 2. main activity: package com.mylauncher; import java.util.Collections; import java.util.List; import Android.app.Activity; import Android.app.AlertDialog; import Android.content.ComponentName; import Android.content.Dialoginterface; import Android.content.DialogInterface.OnClickListener; import Android.content.Intent; import Android.content.pm.PackageManager; import Android.content.pm.ResolveInfo; import Android.net.Uri; import Android.os.Bundle; import Android.view.View; import Android.widget.AdapterView; import Android.widget.AdapterView.OnItemClickListener; import Android.widget.AdapterView.OnItemLongClickListener; import Android.widget.GridView; public class D_MyLauncherActivity extends Activity implements OnItemClickListener, OnItemLongClickListener { private GridView mGridView; private List<ResolveInfo> apps; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); PackageManager manager = this.getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); apps = manager.queryIntentActivities(mainIntent, 0); Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager)); mGridView = (GridView) findViewById(R.id.gridView1); mGridView.setAdapter(new MyGridViewAdapter(this, apps)); mGridView.setOnItemClickListener(this); mGridView.setOnItemLongClickListener(this); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { ResolveInfo app = apps.get(position); Intent i = new Intent(Intent.ACTION_MAIN); i.setComponent(new ComponentName(app.activityInfo.packageName, app.activityInfo.name)); startActivity(i); } @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long arg3) { final ResolveInfo app = apps.get(position); new AlertDialog.Builder(this) .setMessage( "Remove " + app.loadLabel(getPackageManager()) + " from your device?") .setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Uri uri = Uri.fromParts("package", app.activityInfo.packageName, null); Intent it = new Intent(Intent.ACTION_DELETE, uri); startActivity(it); } }).setNegativeButton("Cancel", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); return false; } } 3. adapter: package com.mylauncher; import java.util.List; import Android.content.Context; import Android.content.pm.ResolveInfo; import Android.view.LayoutInflater; import Android.view.View; import Android.view.ViewGroup; import Android.widget.BaseAdapter; import Android.widget.ImageView; import Android.widget.TextView; public class MyGridViewAdapter extends BaseAdapter { private LayoutInflater mInflater; private Context context; private List<ResolveInfo> apps; public MyGridViewAdapter(Context c, List<ResolveInfo> apps) { mInflater = LayoutInflater.from(c); this.apps = apps; this.context = c; } private class ViewHolder { private ImageView appIcon; private TextView appName; } @Override public int getCount() { return apps.size(); } @Override public Object getItem(int position) { return apps.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = mInflater.inflate(R.layout.app_shortcut, null); ViewHolder viewHolder = new ViewHolder(); viewHolder.appIcon = (ImageView) view.findViewById(R.id.imageView1); viewHolder.appName = (TextView) view.findViewById(R.id.textView1); view.setTag(viewHolder); } ViewHolder holder = (ViewHolder) view.getTag(); ResolveInfo app = apps.get(position); holder.appIcon.setBackgroundDrawable(app.loadIcon(context.getPackageManager())); holder.appName.setText(app.loadLabel(context.getPackageManager())); return view; } } 摘自 fhy_2008的专栏 | |
![]() | ![]() |