效果图:

程序列表:


启动程序,获取程序信息:







代码如下:

创建一个AppInfo类来表示应用程序

<pre name="code" class="java">public class AppInfo {public CharSequence title;// 程序名public CharSequence packageName; // 程序包名Intent intent;// 启动Intentpublic Drawable icon;// 程序图标/* * 设置启动该程序的Intent */final void setActivity(ComponentName className, int launchFlags) {intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);intent.setComponent(className);intent.setFlags(launchFlags);}}


  

创建程序列表的适配器:

/** * 程序列表适配器 * @author bill * */public class ShowAppListAdapter extends BaseAdapter {private ArrayList<AppInfo> appList;private LayoutInflater inflater;public ShowAppListAdapter(Context context,ArrayList<AppInfo> appList,PackageManager pm) {this.appList = appList;inflater = LayoutInflater.from(context);}public int getCount() {return appList.size();}public Object getItem(int position) {return appList.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {final AppInfo info = appList.get(position);ViewHolder holder = null;if(null == convertView){convertView = inflater.inflate(R.layout.app_list_item, null);holder = new ViewHolder();holder.lv_image = (ImageView) convertView.findViewById(R.id.lv_icon);holder.lv_name = (TextView) convertView.findViewById(R.id.lv_item_appname);holder.lv_packname = (TextView) convertView.findViewById(R.id.lv_item_packageame);convertView.setTag(holder);}else {holder = (ViewHolder) convertView.getTag();}holder.lv_image.setImageDrawable(info.icon);final CharSequence name = info.title;final CharSequence packName = info.packageName;holder.lv_name.setText(name);holder.lv_packname.setText(packName);return convertView;}private final static  class ViewHolder{ImageView lv_image; TextView lv_name; TextView lv_packname;}}




public class MainActivity extends Activity {/* * 应用程序集合 */private ArrayList<AppInfo> appInfos;private ListView lv_app;/* * 管理应用程序包,并通过它获取程序信息 */private PackageManager pm;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.app_list);pm = getPackageManager();initView();new Thread(runable).start();}private void initView(){lv_app = (ListView) findViewById(R.id.app_list_view);lv_app.setOnItemClickListener(new AppDetailLinster());}private final Runnable runable = new Runnable() {public void run() {loadApplications();myHandler.obtainMessage().sendToTarget();}};private Handler myHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {lv_app.setAdapter(new ShowAppListAdapter(MainActivity.this,appInfos, pm));}};/** * 加载应用列表 */private void loadApplications() {PackageManager manager = this.getPackageManager();Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);final List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0);Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager));if (apps != null) {final int count = apps.size();if (appInfos == null) {appInfos = new ArrayList<AppInfo>(count);}appInfos.clear();for (int i = 0; i < count; i++) {AppInfo application = new AppInfo();ResolveInfo info = apps.get(i);application.title = info.loadLabel(manager);application.setActivity(new ComponentName(info.activityInfo.applicationInfo.packageName,info.activityInfo.name), Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);application.icon = info.activityInfo.loadIcon(manager);application.packageName = info.activityInfo.applicationInfo.packageName;appInfos.add(application);}}}/** * 列表监听类 * @author bill * */public final class AppDetailLinster implements OnItemClickListener {AlertDialog dialog;public void onItemClick(AdapterView<?> view, View arg1,final int position, long arg3) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("选项");builder.setItems(R.array.choice, new OnClickListener() {public void onClick(DialogInterface dialog, int which) {final AppInfo appInfo = appInfos.get(position);switch (which) {case 0: // 启动程序try {startApp(appInfo);} catch (Exception e) {}break;case 1: // 详细信息try {showAppDetail(appInfo);} catch (Exception e) {}break;}dialog.dismiss();}private void showAppDetail(AppInfo appInfo)throws Exception {final String packName = appInfo.packageName.toString();final PackageInfo packInfo = getAppPackinfo(packName);final String versionName = packInfo.versionName;final String[] apppremissions = packInfo.requestedPermissions;final String appName = appInfo.title.toString();Intent showDetailIntent = new Intent(MainActivity.this,ShowAppDetailActivity.class);Bundle bundle = new Bundle();bundle.putString("packagename", packName);bundle.putString("appversion", versionName);bundle.putStringArray("apppremissions", apppremissions);bundle.putString("appname", appName);showDetailIntent.putExtras(bundle);startActivity(showDetailIntent);}private void startApp(AppInfo appInfo)throws Exception {final String packName = appInfo.packageName.toString();final String activityName = getActivityName(packName);if (null == activityName) {Toast.makeText(MainActivity.this, "程序无法启动",Toast.LENGTH_SHORT);return;}Intent intent = new Intent();intent.setComponent(new ComponentName(packName,activityName));startActivity(intent);}});dialog = builder.create();dialog.show();}}/** * 获取程序信息 * @param packName * @return * @throws Exception */public PackageInfo getAppPackinfo(String packName) throws Exception {return pm.getPackageInfo(packName, PackageManager.GET_ACTIVITIES| PackageManager.GET_PERMISSIONS);}/** * 获取启动相关程序的Activity * @param packName * @return * @throws Exception */public String getActivityName(String packName) throws Exception {final PackageInfo packInfo = pm.getPackageInfo(packName,PackageManager.GET_ACTIVITIES);final ActivityInfo[] activitys = packInfo.activities;if (null == activitys || activitys.length <= 0) {return null;}return activitys[0].name;}}


app_list.xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical"    android:background="@android:color/black" >    <ListView        android:id="@+id/app_list_view"        android:layout_width="fill_parent"        android:layout_height="fill_parent"      >    </ListView></RelativeLayout>



app_list_item.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="fill_parent"android:layout_height="wrap_content" android:gravity="center_vertical"><ImageViewandroid:id="@+id/lv_icon"android:layout_width="48px"android:layout_height="48px"android:layout_marginTop="5px"android:layout_marginBottom="5px"></ImageView><LinearLayoutandroid:orientation="vertical"android:layout_width="wrap_content"android:layout_height="48px"android:paddingLeft="5px"><TextViewandroid:id="@+id/lv_item_appname"android:layout_width="fill_parent"android:layout_height="wrap_content"android:singleLine="true"android:textSize="16px"android:textStyle="bold"android:textColor="#fff"></TextView><TextViewandroid:id="@+id/lv_item_packageame"android:layout_width="fill_parent"android:layout_height="wrap_content"android:singleLine="true"android:textColor="#fff"></TextView></LinearLayout></LinearLayout>



/** * 查看应用信息 * @author bill * */public class ShowAppDetailActivity extends Activity {private TextView tv_appname;private TextView tv_appversion;private TextView tv_packagename;private TextView tv_permission;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.app_detial);tv_appname = (TextView) findViewById(R.id.detail_app_name);tv_appversion = (TextView) findViewById(R.id.detail_app_version);tv_packagename = (TextView) findViewById(R.id.detail_app_packname);tv_permission = (TextView) findViewById(R.id.detail_app_permissions);Bundle bundle = this.getIntent().getExtras();String packagename=  bundle.getString("packagename");String appversion = bundle.getString("appversion");String appname = bundle.getString("appname");String[] appPremissions = bundle.getStringArray("apppremissions");StringBuilder sb = new StringBuilder();for(String s : appPremissions){sb.append(s);sb.append("\n");}tv_appname.setText(appname);tv_appversion.setText(appversion);tv_packagename.setText(packagename);tv_permission.setText(sb.toString());}}

app_detial.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    >    <TableLayout         android:id="@+id/app_table"        android:layout_width="fill_parent"        android:layout_height="wrap_content">        <TableRow               android:id="@+id/tableRow1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"            >            <TextView                 android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="程序名字"    />    <TextView         android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/detail_app_name"    />        </TableRow>                 <TableRow         android:id="@+id/tableRow2"         android:layout_width="wrap_content"         android:layout_height="wrap_content">     <TextView          android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="程序版本"    />    <TextView         android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/detail_app_version"    />    </TableRow>         <TableRow         android:id="@+id/tableRow3"          android:layout_width="wrap_content"          android:layout_height="wrap_content">     <TextView          android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="程序包名"    />    <TextView         android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/detail_app_packname"    />    </TableRow>     <TableRow          android:id="@+id/tableRow4"         android:layout_width="wrap_content"          android:layout_height="wrap_content">             <TextView                  android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="程序权限"    />    <TextView         android:layout_width="wrap_content"    android:layout_height="wrap_content"        android:id="@+id/detail_app_permissions"    />             </TableRow>    </TableLayout></LinearLayout>

最后别忘了配置 AndroidManifest。



转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/44274387情绪控_

更多相关文章

  1. 【ndk】直接使用ndk提供的arm-linux-androideabi-gcc编译android
  2. Android内核解读-Android系统的开机启动过程
  3. Android(安卓)3.2 应用程序联机(devices)测试失败提示INSTALL_FAIL
  4. robotium自动化测试应主意点
  5. Android之Fragmentation的使用一(单Activity+多Fragment设计)
  6. android的一些异常
  7. fir.im Weekly - iOS/Android(安卓)应用程序架构解析
  8. 用 Eclipse + GDB调试Android中C/C++程序
  9. Compile a native C Android(安卓)application

随机推荐

  1. Android(安卓)studio Error:Cause: org/g
  2. 密码设置Android设备管理
  3. Android 上移植 ghostscript-9.04 静态编
  4. Android 横竖屏切换保留状态
  5. Android UI设计——ImageView和ImageButt
  6. Android4.4.2 获取NTP时间,并设置系统时间
  7. Android AndroidX的迁移
  8. 如何从UA分辨出Android设备类型
  9. android 汉字转拼音 笔记
  10. phoneGap插件 .