手机安全卫士的一些总结

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="http://schemas.android.com/apk/res/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="http://schemas.android.com/apk/res/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里看到

暂时就整理了这么些如果有不对的地方还请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值