android 软件管理器

 

这个android 软件管理器,仅供学习使用,如真投入使用,还需很多地方的完善!如果有什么不好的地方,请大哥指教!哈

 

package liuyang.explorer;

import java.util.ArrayList;
import java.util.List;

import liuyang.explorer.adapter.AbstractBaseAdapter;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 软件管理器主程序 这个仅供学习用! 还有很多方面没有想到,只是学学基本的知识
 *
 * @author www.007wang.com
 * @version 20111105
 * @qq 596072425
 *
 */
public class MainActivity extends Activity {

 private ImageButton changeViewButton = null;
 private ImageButton changeAppButton = null;
 private boolean isViewList;
 private ListView listView = null;
 private GridView gridView = null;
 private boolean isAllApplication = true;
 private List<PackageInfo> userinfos;
 private List<PackageInfo> allinfos;
 private List<PackageInfo> currentinfos;
 private ProgressDialog progressDialog;

 @Override
 protected void onResume() {
  super.onResume();
  loadApp();
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  loadApp();
 }

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setContentView(R.layout.main);

  changeViewButton = (ImageButton) findViewById(R.id.change_view_btn);
  changeAppButton = (ImageButton) findViewById(R.id.change_app_btn);
  listView = (ListView) findViewById(R.id.list_view);
  gridView = (GridView) findViewById(R.id.grid_view);
  listView.setOnItemClickListener(new ItemClickListener());
  gridView.setOnItemClickListener(new ItemClickListener());
  changeViewButton.setOnClickListener(new ChangeViewButtonListener());
  changeAppButton.setOnClickListener(new ChangeAppButtonListener());
  loadApp();
 }

 /**
  * 切换APP视图的按钮监听器
  *
  * @author liuyang
  *
  */
 class ChangeViewButtonListener implements OnClickListener {

  @Override
  public void onClick(View v) {
   if (isViewList) {
    changeViewButton.setImageResource(R.drawable.grids);
    listView.setVisibility(View.GONE);
    gridView.setVisibility(View.VISIBLE);
    isViewList = false;
   } else {
    changeViewButton.setImageResource(R.drawable.list);
    listView.setVisibility(View.VISIBLE);
    gridView.setVisibility(View.GONE);
    isViewList = true;
   }
  }
 }

 /**
  * 切换APP应用范围(用户,所有)的按钮监听器
  *
  * @author liuyang
  *
  */
 class ChangeAppButtonListener implements OnClickListener {

  @Override
  public void onClick(View v) {
   if (isAllApplication) {
    changeAppButton.setImageResource(R.drawable.all);
    isAllApplication = false;
    currentinfos = allinfos;
   } else {
    changeAppButton.setImageResource(R.drawable.user);
    isAllApplication = true;
    currentinfos = userinfos;
   }

   listView.setAdapter(new ListViewAdapter(MainActivity.this,
     currentinfos));
   gridView.setAdapter(new GridViewAdapter(MainActivity.this,
     currentinfos));

  }

 }

 /**
  * 将APP数据装载到列表视图的适配器
  *
  * @author liuyang
  *
  */
 class ListViewAdapter extends AbstractBaseAdapter {

  ListViewAdapter(Context context, List<PackageInfo> list) {
   super(context, list);
  }

  @Override
  public View viewDetail(LayoutInflater layoutInflater,
    PackageInfo packageInfo) {
   View view = layoutInflater.inflate(R.layout.listview, null);
   ImageView imageView = (ImageView) view
     .findViewById(R.id.list_app_item_icon);
   ApplicationInfo info = packageInfo.applicationInfo;
   imageView.setImageDrawable(info.loadIcon(getPackageManager()));
   TextView textView = (TextView) view
     .findViewById(R.id.list_app_item_name);
   textView.setText(info.loadLabel(getPackageManager()));
   TextView desc = (TextView) view
     .findViewById(R.id.list_app_item_package);
   desc.setText(info.packageName);
   return view;
  }
 }

 /**
  * 将APP数据装载到网格视图的适配器
  *
  * @author liuyang
  * @version 20111107
  *
  */
 class GridViewAdapter extends AbstractBaseAdapter {

  GridViewAdapter(Context context, List<PackageInfo> list) {
   super(context, list);
  }

  @Override
  public View viewDetail(LayoutInflater layoutInflater,
    PackageInfo packageInfo) {
   View view = layoutInflater.inflate(R.layout.gridview, null);
   ImageView imageView = (ImageView) view
     .findViewById(R.id.grid_view_icon);
   ApplicationInfo info = packageInfo.applicationInfo;
   imageView.setImageDrawable(info.loadIcon(getPackageManager()));
   TextView textView = (TextView) view
     .findViewById(R.id.grid_view_text);
   textView.setText(info.loadLabel(getPackageManager()));
   return view;
  }
 }

 /**
  * 加载程序
  */
 private void loadApp() {
  progressDialog = ProgressDialog.show(this,
    getString(R.string.progress_dialog_title),
    getString(R.string.progress_dialog_content), true, false);
  
  progressDialog.show();
  setProgressBarIndeterminateVisibility(true);
  allinfos = getPackageManager().getInstalledPackages(
    PackageManager.GET_UNINSTALLED_PACKAGES
      | PackageManager.GET_ACTIVITIES);
  userinfos = new ArrayList<PackageInfo>();

  for (PackageInfo info : allinfos) {
   int flags = info.applicationInfo.flags;
   boolean flag = false;
   if ((flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
    flag = true;
   } else if ((flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
    flag = true;
   }
   if (flag) {
    userinfos.add(info);
   }
  }
  if (isAllApplication) {
   currentinfos = allinfos;
  } else {
   currentinfos = userinfos;
  }
  
  listView.setAdapter(new ListViewAdapter(MainActivity.this,
    currentinfos));
  gridView.setAdapter(new GridViewAdapter(MainActivity.this,
    currentinfos));
  progressDialog.dismiss();
  setProgressBarIndeterminateVisibility(false);
  
 }
 

 /**
  * 点击视图中的ITEM的事件监听器
  *
  * @author liuyang
  *
  */
 class ItemClickListener implements OnItemClickListener {
  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position,
    long arg3) {
   final PackageInfo packageInfo = currentinfos.get(position);
   AlertDialog.Builder builder = new AlertDialog.Builder(
     MainActivity.this);
   builder.setTitle(getString(R.string.option));
   builder.setItems(R.array.choice, new AlertDialog.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     switch (which) {
     case 0:// 启动程序
      ActivityInfo activityInfo = packageInfo.activities[0];
      if (activityInfo != null)
       startProgram(packageInfo, activityInfo);
      else
       Toast.makeText(MainActivity.this,
         getString(R.string.program_none),
         Toast.LENGTH_SHORT);
      break;
     case 1:// 详细信息
      showDetailInfo(packageInfo);
      break;
     case 2:// 卸载程序
      deleteProgram(packageInfo);
      break;
     }
    }

   });
   builder.setNegativeButton(R.string.cancel_btn, null);
   builder.create().show();

  }
 }

 /**
  * 启动程序
  *
  * @param info
  *            Application下面第一个activity
  * @param activityInfo
  */
 private void startProgram(PackageInfo info, ActivityInfo activityInfo) {
  Intent intent = new Intent();

  intent.setComponent(new ComponentName(info.packageName,
    activityInfo.name));
  startActivity(intent);
 }

 /**
  * 删除程序
  *
  * @param info
  */
 private void deleteProgram(PackageInfo info) {
  Intent intent = new Intent();
  intent.setAction(Intent.ACTION_DELETE);
  Uri packageUri = Uri.parse("package:" + info.packageName);
  intent.setData(packageUri);

  startActivityForResult(intent, 0);
 }

 /**
  * APP详细信息
  *
  * @param info
  */
 private void showDetailInfo(PackageInfo info) {
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  builder.setTitle(R.string.program_title);
  StringBuilder sb = new StringBuilder();

  sb.append("\n" + getString(R.string.program_name)
    + info.applicationInfo.loadLabel(getPackageManager()));
  sb.append("\n" + getString(R.string.program_package) + info.packageName);
  sb.append("\n" + getString(R.string.program_version) + info.versionName);
  sb.append("\n" + getString(R.string.propram_version_code)
    + info.versionCode);
  builder.setMessage(sb);
  builder.setIcon(info.applicationInfo.loadIcon(getPackageManager()));
  builder.setPositiveButton(R.string.comfire_btn, null);
  builder.create().show();
 }

}

 

package liuyang.explorer.adapter;

import java.util.List;
 
import android.content.Context;
import android.content.pm.PackageInfo;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
/**
 * 抽象的视图适配器
 * @author liuyang
 *
 */
public abstract class AbstractBaseAdapter extends BaseAdapter {

 List<PackageInfo> list = null;
 LayoutInflater layoutInflater;

 public AbstractBaseAdapter(Context context, List<PackageInfo> list) {
  this.list = list;
  layoutInflater = LayoutInflater.from(context);
 }

 @Override
 public int getCount() {
  return list.size();
 }

 @Override
 public Object getItem(int position) {
  return list.get(position);
 }

 @Override
 public long getItemId(int position) {
  return position;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  //View view = layoutInflater.inflate(R.layout.listview, null);
  View view = viewDetail(layoutInflater,list.get(position));
  return view;
 }
 
 /**
  * 将布局文件里面的容器装载具体的信息
  * @param layoutInflater
  * @param packageInfo 每个程序的相关信息
  */
 public abstract View viewDetail(LayoutInflater layoutInflater,PackageInfo packageInfo);

}

 

<?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">

 <ImageView android:id="@+id/list_app_item_icon" android:layout_height="50px" android:layout_width="64px"
  >
 </ImageView>
 <LinearLayout android:orientation="vertical"
  android:layout_width="wrap_content" android:layout_height="50px">
  <TextView android:id="@+id/list_app_item_name"
   android:layout_width="fill_parent" android:layout_height="wrap_content"
   android:textStyle="bold" android:textColor="#ffffff"
   android:singleLine="true">
        </TextView>
  <TextView android:id="@+id/list_app_item_package"
   android:layout_width="fill_parent" android:layout_height="wrap_content"
   android:textColor="#ffffff" android:singleLine="true">

  </TextView>
 </LinearLayout>

</LinearLayout>

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="90px"
 android:layout_height="wrap_content" android:gravity="center">

 <ImageView android:id="@+id/grid_view_icon"
  android:layout_width="64px" android:layout_height="64px">
 </ImageView>
 <TextView android:id="@+id/grid_view_text"
  android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:lines="2" android:textSize="16px" android:textColor="#FFF" />
</LinearLayout>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值