安全卫士的一些总结"/>
手机安全卫士的一些总结
Android Studio设置界面无标题:
Android Studio 里新建Activity默认继承的不是Activity,需要改成继承Activity再重新导包就可以。
关于listview节省资源的用法:
复用contentview,减少子孩子的查询次数,新建viewHolder类,用语存储子孩子的位置。太多就分批次加载数据,每页显示多少数据,下滑继续加载。
关于复杂listview:
通过判断position与展示的关系,分成两个list分别展示需要展示的内容
private class MyAdapter extends BaseAdapter{@Override public int getCount() {//return appInfoList.size(); return userInfoList.size()+1+sysInfoList.size()+1; }@Override public Object getItem(int position) {return null; }@Override public long getItemId(int position) {return 0; }@Override public View getView(int position, View convertView, ViewGroup parent) {View view; ViewHolder viewHoleder; AppInfo appInfo; if(position==0){TextView tv= new TextView(AppManagerActivity.this); tv.setTextColor(Color.WHITE); tv.setBackgroundColor(Color.GRAY); tv.setText("用户程序"+userInfoList.size()+"个"); return tv; }else if(position==(userInfoList.size()+1)){TextView tv= new TextView(AppManagerActivity.this); tv.setTextColor(Color.WHITE); tv.setBackgroundColor(Color.GRAY); tv.setText("系统程序"+sysInfoList.size()+"个"); return tv; }else if(position<=userInfoList.size()){//用户程序 int newposition= position-1; appInfo=userInfoList.get(newposition); }else {int newposition=position-2-userInfoList.size(); appInfo=sysInfoList.get(newposition); }if(convertView!=null&&convertView instanceof RelativeLayout){view=convertView; viewHoleder= (ViewHolder) view.getTag(); }else{viewHoleder= new ViewHolder(); LayoutInflater inflater=getLayoutInflater(); view = inflater.inflate(R.layout.app_info_list, null); viewHoleder.app_icon= (ImageView) view.findViewById(R.id.app_icon); viewHoleder.app_name= (TextView) view.findViewById(R.id.app_name); viewHoleder.app_rom_sd= (TextView) view.findViewById(R.id.app_rom_sd); viewHoleder.app_size= (TextView) view.findViewById(R.id.app_size); /*viewHoleder.app_uninstall= (Button) view.findViewById(R.id.app_uninstall);*/ viewHoleder.app_is_lock= (ImageView) view.findViewById(R.id.app_is_lock); view.setTag(viewHoleder); }//AppInfo app= appInfoList.get(position); viewHoleder.app_icon.setImageDrawable(appInfo.getIcon()); viewHoleder.app_name.setText(appInfo.getName()); if(appInfo.isInRom()){viewHoleder.app_rom_sd.setText("系统存储"); }else{viewHoleder.app_rom_sd.setText("外部存储"); }// 查询是否加锁 if(appLockDao.find(appInfo.getPackageName())){viewHoleder.app_is_lock.setImageResource(R.drawable.lock); }return view; } } static class ViewHolder {ImageView app_icon; TextView app_name; TextView app_rom_sd; TextView app_size; ImageView app_is_lock; }
broadcastreceiver是唯一一个可以用代码注册的控件。
常见方法是启动一个服务,在服务里面启动广播接受者,关闭服务的时候讲广播接受者销毁掉。可以控制是否开启一个功能。
@Override public void onCreate() {am= (ActivityManager) getSystemService(ACTIVITY_SERVICE); lockReciver= new LockReciver(); registerReceiver(lockReciver,new IntentFilter(Intent.ACTION_SCREEN_OFF)); super.onCreate(); }@Override public void onDestroy() {unregisterReceiver(lockReciver); lockReciver=null; super.onDestroy(); } class LockReciver extends BroadcastReceiver{@Override public void onReceive(Context context, Intent intent) {Log.i(TAG, "手机锁屏了"); List<ActivityManager.RunningAppProcessInfo>runningProcess= am.getRunningAppProcesses(); for(ActivityManager.RunningAppProcessInfo running:runningProcess){am.killBackgroundProcesses(running.processName); }} }回调函数解耦合
/** * 进度条设置的回调函数 */ public interface CallBack {/** * @param max 设置进度条的最大值 */ public void setMax(int max); /** * @param progress 设置进度条的增长 */ public void setprogress(int progress); }/** * @param context 上下文 * @throws Exception 写xml文件 * 1.获得流(sd卡的路径+名字)输出流 * 2.XmlSerializer Xml.newSerializer();xml生成器 * <document><tag></tag></document> */ public static void backUpSms(Context context, CallBack callBack) throws Exception {ContentResolver resolver = context.getContentResolver(); File file = new File(Environment.getExternalStorageDirectory(), "backup.xml"); FileOutputStream fos = new FileOutputStream(file); XmlSerializer serializer = (XmlSerializer) Xml.newSerializer(); serializer.setOutput(fos, "utf-8"); serializer.startDocument("utf-8", true); serializer.startTag(null, "smss"); Uri uri = Uri.parse("content://sms/"); Cursor cursor =resolver.query(uri, new String[]{"body", "address", "type", "date"}, null, null, null); callBack.setMax(cursor.getCount());//设置进度条的最大值 int procress = 0;//进度条的初始值 if (cursor != null) {while (cursor.moveToNext()) {String body = cursor.getString(0); String address = cursor.getString(1); String type = cursor.getString(2); String date = cursor.getString(3); serializer.startTag(null, "sms"); serializer.startTag(null, "body"); serializer.text(body); serializer.endTag(null, "body"); serializer.startTag(null, "address"); serializer.text(address); serializer.endTag(null, "address"); serializer.startTag(null, "type"); serializer.text(type); serializer.endTag(null, "type"); serializer.startTag(null, "date"); serializer.text(date); serializer.endTag(null, "date"); serializer.endTag(null, "sms"); procress++; callBack.setprogress(procress);//每循环一次进度条+1 }cursor.close(); }serializer.endTag(null, "smss"); serializer.endDocument(); }
a_tools_backup_sms.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {pd=new ProgressDialog(AToolsActivity.this); pd.setTitle("正在备份短信"); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.show(); new Thread(new Runnable() {@Override public void run() {try {SmsUntil.backUpSms(AToolsActivity.this, new SmsUntil.CallBack() {@Override public void setMax(int max) {pd.setMax(max); }@Override public void setprogress(int progress) {pd.setProgress(progress); }}); runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(AToolsActivity.this, "备份成功", Toast.LENGTH_SHORT).show(); }}); } catch (Exception e) {runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(AToolsActivity.this, "备份失败", Toast.LENGTH_SHORT).show(); }}); e.printStackTrace(); }finally {pd.dismiss(); }}}).start(); } });解耦和
Activity的进入效果:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="" android:fromXDelta="0%p" android:fromYDelta="0" android:toXDelta="-100%p" android:toYDelta="0" android:duration="500" > </translate>从哪个xy到那个xy用多长时间
自定义button按钮的点击样式
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=""> <item android:state_pressed="true" android:drawable="@drawable/btn_green_pressed" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/btn_green_pressed" /> <!-- focused --> <item android:drawable="@drawable/btn_green_normal" /> <!-- default --> </selector>按下,松开,默认
Android Studio加载数据库到手机的问题:
Android Studio需要自己建一个assets文件夹,数据库文件在加载到手机时会出问题,我们需要把拓展名改了例如改成。MP3然后加载到手机时再把拓展名改回来就可以用了。
Android Studio绑定远程服务的方法:
同样需要自己新建一个aidl文件夹,将需要绑定的aidl文件放在跟aidl文件内部一样包名的包中,然后Build→Rebuild Project,绑定成功的话generated/source/debug里看到
暂时就整理了这么些如果有不对的地方还请指正
更多推荐
手机安全卫士的一些总结
发布评论