一、主界面用到了一个GridView的控件
a) GridView和ListView的适配器是一样的。不同的是GridView一列显示多个Item,而ListView只能显示一个条目。GridView的适配器如下
public class MenuAdpater extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private ImageView iv_item;
private TextView tv_item;
private SharedPreferences sp;
public MenuAdpater(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
sp = context.getSharedPreferences("config", context.MODE_PRIVATE);
}
private static String[] names = { "手机防盗", "通讯卫士", "软件管理", "任务管理", "流量管理",
"手机杀毒", "系统优化", "高级工具", "设置中心" };
private static int[] icons = { R.drawable.safe, R.drawable.callmsgsafe,
R.drawable.netmanager, R.drawable.taskmanager, R.drawable.app,
R.drawable.trojan, R.drawable.sysoptimize, R.drawable.atools,
R.drawable.settings };
@Override
public int getCount() {
// TODO Auto-generated method stub
return names.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = inflater.inflate(R.layout.item_main_gridview, null);
iv_item = (ImageView) view.findViewById(R.id.iv_item);
tv_item = (TextView) view.findViewById(R.id.tv_item);
iv_item.setImageResource(icons[position]);
String itemText;
if (position != 0)
itemText = names[position];
else {
itemText = sp.getString("itemText", names[position]);
}
tv_item.setText(itemText);
return view;
}
}
二、为GridView设置数据适配器,并设置单击和长按事件
gv_menu = (GridView) findViewById(R.id.gv_main_menu);
gv_menu.setAdapter(new MenuAdpater(this));
// 设置单击条目事件
gv_menu.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String funcName = ((TextView) view.findViewById(R.id.tv_item))
.getText().toString().trim();
Toast.makeText(getApplicationContext(), funcName, 0).show();
switch (position) {
case 0:// 点击的是手机防盗
if (isNeedInputPwd()) {// 没有设置过密码
showSettingPassword();// 显示设置密码对话框
} else {//
showInputPassword();
}
break;
case 1:
showActiviy(BlackListActivity.class);
break;
case 2:
showActiviy(AppManagerActivity.class);
break;
case 3:
showActiviy(TaskManagerActivity.class);
break;
case 4:// 流量管理
// showActiviy(TaskManagerActivity.class);
break;
case 5:// 手机杀毒
showActiviy(KillVirusActivity.class);
break;
case 6:// 系统优化
break;
case 7:
showActiviy(AtoolsActivity.class);
break;
case 8:
showActiviy(SettingCenterActivity.class);
break;
default:
break;
}
}
});
// 设置单击条目的长按事件
gv_menu.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent,
final View view, int position, long id) {
if (position == 0) {
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setTitle("修改条目的名称");
builder.setMessage("请输入修改后的的名字");
final EditText editText = new EditText(MainActivity.this);
editText.setHint("请输入文本");
builder.setView(editText);
builder.setPositiveButton(
"确定",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
String itemText = editText.getText()
.toString().trim();
if (itemText != null
&& !"".equals(itemText)) {
Editor editor = sp.edit();
editor.putString("itemText", itemText);
editor.commit();
} else {
Toast.makeText(getApplicationContext(),
"条目名称不能为空!", 0).show();
return;
}
((TextView) view.findViewById(R.id.tv_item))
.setText(itemText);
}
});
builder.setNegativeButton(
"取消",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
Toast.makeText(getApplicationContext(),
"名称取消修改", 0);
}
});
builder.create().show();
}
return false;
}
});
三、判断当前应用是否具有设备管理权限,如果没有打开激活设备管理权限的界面
ComponentName myComponentName = new ComponentName(this,
DeviceAdminSample.class);
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
// 立刻打开激活设备管理器的界面
if (!dpm.isAdminActive(myComponentName)) {
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
myComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"激活设备管理器权限才可以一键锁屏哟,敬请期待更多惊喜...");
startActivity(intent);
}
四、用户单机手机防盗条目时判断用户是否设置过密码,如果没有设置过密码,则弹出设置密码提醒框
public void showSettingPassword() {
builder = new Builder(this);
View view = View.inflate(this,
R.layout.lostphone_settingpwd_dialog_activity, null);
et_pwd_setting_first = (EditText) view
.findViewById(R.id.et_pwd_setting_first);
et_pwd_setting_second = (EditText) view
.findViewById(R.id.et_pwd_setting_second);
btn_pwd_cancle = (Button) view.findViewById(R.id.btn_pwd_cancle);
btn_pwd_confirm = (Button) view.findViewById(R.id.btn_pwd_confirm);
btn_pwd_cancle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
btn_pwd_confirm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String pwd1 = et_pwd_setting_first.getText().toString();
String pwd2 = et_pwd_setting_second.getText().toString();
if (TextUtil.isSameText(pwd1, pwd2)) {
System.out.println(pwd1 + "------------" + pwd2);
Editor editor = sp.edit();
editor.putString("pwd_in_lostphone", MD5Utils.encode(pwd1));
editor.commit();
dialog.dismiss();
} else {
Toast.makeText(MainActivity.this, "两次输入的密码不一致或长度太短,请重新输入!",
0).show();
}
}
});
dialog = builder.create();
dialog.setView(view, 0, 0, 0, 0);
dialog.show();
}
五、打开主界面时判断是否应该启动些服务
// 开机自动启动,或者在第一次安装的时候启动
if (sp.getBoolean("isShowPhoneAddress", true)) {
this.startService(PhoneAddressService.class);
}
if (sp.getBoolean("isDogWatch", true)) {
this.startService(WatcherDogService.class);
}
if (sp.getBoolean("isAutoSmsPhoneSafety", true)) {
this.startService(CallSMSSaftyService.class);
}
六、如果用户已经ROOT得到该root权限
// 获取Root权限
try {
Runtime.getRuntime().exec("su");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}