接口的使用

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

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();


    }


}
posted @ 2016-03-05 21:22  有点理想的码农  阅读(165)  评论(0编辑  收藏  举报