• 接口的使用


    业务逻辑经常改的话,那么定义接口是很有用的。
    这样就可以做到,别人说一句话,你就改一句话。而不是别人说一句话,你改一坨代码。
    接口里面可以通过参数把数据传递给接口的实现类,那么接口,以及原来的东西都不需要改。
    例子:

    package com.itheima.mobileguard.utils;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    import org.xmlpull.v1.XmlSerializer;
    
    import android.R.integer;
    import android.app.ProgressDialog;
    import android.content.ContentResolver;
    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Environment;
    import android.os.SystemClock;
    import android.util.Xml;
    import android.widget.ProgressBar;
    
    /**
     * ============================================================
     * 
     * 版 权 : 黑马程序员教育集团 版权所有 (c) 2015
     * 
     * 作 者 : 马伟奇
     * 
     * 版 本 : 1.0
     * 
     * 创建日期 : 2015-3-3 上午9:15:03
     * 
     * 描 述 :
     * 
     * 短信备份的工具类 修订历史 :
     * 
     * ============================================================
     **/
    public class SmsUtils {
    
        /**
         * 备份短信的接口
         * @author Administrator
         *
         */
        public interface BackUpCallBackSms{
    
            public void befor(int count);
    
            public void onBackUpSms(int process);
    
        }
    
    
        public static boolean backUp(Context context, BackUpCallBackSms callback) {
            /**
             * 目的 : 备份短信:
             * 
             * 1 判断当前用户的手机上面是否有sd卡 
             * 2 权限 --- 
             *   使用内容观察者
             * 3 写短信(写到sd卡)
             * 
             * 
             */
    
            // 判断当前sd卡的状态
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED)) {
                // 如果能进来就说明用户有SD卡
                ContentResolver resolver = context.getContentResolver();
                // 获取短信的路径
                Uri uri = Uri.parse("content://sms/");
                // type = 1 接收短信
                // type = 2 发送短信
                // cursor 表示游标的意思
                Cursor cursor = resolver.query(uri, new String[] { "address",
                        "date", "type", "body" }, null, null, null);
                //获取当前一共有多少条短信
                int count = cursor.getCount();
                //设置pd的最大值
    //          pd.setMax(count);
    //          progressBar1.setMax(count);
    
                callback.befor(count);
    
                //进度条默认是0
                int process = 0;
    
                // 写文件
                try {
                    // 把短信备份到sd卡 第二个参数表示名字
                    File file = new File(Environment.getExternalStorageDirectory(),
                            "backup.xml");
    
                    FileOutputStream os = new FileOutputStream(file);
                    // 得到序列化器
                    // 在android系统里面所有有关xml的解析都是pull解析
                    XmlSerializer serializer = Xml.newSerializer();
                    // 把短信序列化到sd卡然后设置编码格式
                    serializer.setOutput(os, "utf-8");
                    // standalone表示当前的xml是否是独立文件 ture表示文件独立。yes
                    serializer.startDocument("utf-8", true);
                    // 设置开始的节点 第一个参数是命名空间。第二个参数是节点的名字
                    serializer.startTag(null, "smss");
                    //设置smss节点上面的属性值 第二个参数是名字。第三个参数是值
                    serializer.attribute(null, "size", String.valueOf(count));
                    // 游标往下面进行移动
                    while (cursor.moveToNext()) {
                        System.err.println("----------------------------");
                        System.out.println("address = " + cursor.getString(0));
                        System.out.println("date = " + cursor.getString(1));
                        System.out.println("type = " + cursor.getString(2));
                        System.out.println("body = " + cursor.getString(3));
    
                        serializer.startTag(null, "sms");
    
                        serializer.startTag(null, "address");
                        // 设置文本的内容
                        serializer.text(cursor.getString(0));
    
                        serializer.endTag(null, "address");
    
                        serializer.startTag(null, "date");
    
                        serializer.text(cursor.getString(1));
    
                        serializer.endTag(null, "date");
    
                        serializer.startTag(null, "type");
    
                        serializer.text(cursor.getString(2));
    
                        serializer.endTag(null, "type");
    
                        serializer.startTag(null, "body");
    
                        //读取短信的内容
                        /**
                         * 加密:第一个参数表示加密种子(密钥)
                         *     第二个参数表示加密的内容
                         */
                        serializer.text(Crypto.encrypt("123", cursor.getString(3)));
    
                        serializer.endTag(null, "body");
    
                        serializer.endTag(null, "sms");
                        //序列化完一条短信之后就需要++
                        process++;
    
    //                  pd.setProgress(process);
    //                  
    //                  progressBar1.setProgress(process);
    
                        callback.onBackUpSms(process);
    
                        SystemClock.sleep(200);
    
                    }
                    cursor.close();
    
                    serializer.endTag(null, "smss");
    
                    serializer.endDocument();
    
                    os.flush();
    
                    os.close();
    
                    return true;
    
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
            }
    
            return false;
        }
    
    }
    
    package com.itheima.mobileguard.activities;
    
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Looper;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.itheima.mobileguard.R;
    import com.itheima.mobileguard.utils.SmsUtils;
    import com.itheima.mobileguard.utils.SmsUtils.BackUpCallBackSms;
    import com.itheima.mobileguard.utils.UIUtils;
    import com.lidroid.xutils.ViewUtils;
    import com.lidroid.xutils.view.annotation.ViewInject;
    /**
     * ============================================================
     * 
     * 版 权 : 黑马程序员教育集团 版权所有 (c) 2015
     * 
     * 作 者 : 马伟奇
     * 
     * 版 本 : 1.0
     * 
     * 创建日期 : 2015-3-3 上午9:10:18
     * 
     * 描 述 :
     * 
     *        高级工具
     * 修订历史 :
     * 
     * ============================================================
     **/
    public class AtoolsActivity extends Activity {
    
        private Button button;
        private ProgressDialog pd;
        @ViewInject(R.id.progressBar1)
        private ProgressBar progressBar1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_atools);
            ViewUtils.inject(this);
    
        }
    
    
        public void numberAddressQuery(View view){
            Intent intent = new Intent(this,NumberAddressQueryActivity.class);
            startActivity(intent);
        }
    
        /**
         * 备份短信
         * @param view
         */
        public void backUpsms(View view){
            //初始化一个进度条的对话框
            pd = new ProgressDialog(AtoolsActivity.this);
            pd.setTitle("提示");
            pd.setMessage("稍安勿躁。正在备份。你等着吧。。");
            pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pd.show();
            new Thread(){
                public void run() {
                    boolean result = SmsUtils.backUp(AtoolsActivity.this,new BackUpCallBackSms() {
    
                        @Override
                        public void onBackUpSms(int process) {
                            pd.setProgress(process);
                            progressBar1.setProgress(process);
    
                        }
    
                        @Override
                        public void befor(int count) {
                            pd.setMax(count);
                            progressBar1.setMax(count);
                        }
                    });
                    if(result){
                        //安全弹吐司的方法
                        UIUtils.showToast(AtoolsActivity.this, "备份成功");
                    }else{
                        UIUtils.showToast(AtoolsActivity.this, "备份失败");
                    }
                    pd.dismiss();
                };
            }.start();
    
    
        }
    
    
    }
    
  • 相关阅读:
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    个人作业——软件工程实践总结&个人技术博客
    个人技术总结
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(1/2)
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/6647937.html
Copyright © 2020-2023  润新知