这个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>