Java中回调函数编写

package XXX.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.xmlpull.v1.XmlSerializer;

import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.util.Xml;
import android.widget.ProgressBar;

/**
 * 短信的工具类
 *
 */
public class SmsUtils {

	/**
	 * 备份短信的回调接口
	 */
	public interface BackUpCallBack {
		/**
		 * 开始备份的时候,设置进度的最大值
		 *
		 * @param max
		 *            总进度
		 */
		public void beforeBackup(int max);

		/**
		 * 备份过程中,增加进度
		 *
		 * @param progress
		 *            当前进度
		 */
		public void onSmsBackup(int progress);

	}

	/**
	 * 备份用户的短信
	 *
	 * @param context
	 *            上下文
	 * @param BackUpCallBack
	 *            备份短信的接口
	 */
	public static void backupSms(Context context, BackUpCallBack callBack)
			throws Exception {
		ContentResolver resolver = context.getContentResolver();
		File file = new File(Environment.getExternalStorageDirectory(),
				"backup.xml");
		FileOutputStream fos = new FileOutputStream(file);
		// 把用户的短信一条一条读出来,按照一定的格式写到文件里
		XmlSerializer serializer = Xml.newSerializer();// 获取xml文件的生成器(序列化器)
		// 初始化生成器
		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);
		// 开始备份的时候,设置进度条的最大值
		int max = cursor.getCount();
		// pb.setMax(max);
		// pd.setMax(max);
		callBack.beforeBackup(max);
		serializer.attribute(null, "max", max + "");
		int process = 0;
		while (cursor.moveToNext()) {
			Thread.sleep(500);
			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");
			// 备份过程中,增加进度
			process++;
			// pb.setProgress(process);
			// pd.setProgress(process);
			callBack.onSmsBackup(process);
		}
		cursor.close();
		serializer.endTag(null, "smss");
		serializer.endDocument();
		fos.close();
	}

	/**
	 * 还原短信
	 *
	 * @param context
	 * @param flag
	 *            是否清理原来的短信
	 */
	public static void restoreSms(Context context, boolean flag) {
		Uri uri = Uri.parse("content://sms/");
		if (flag) {
			context.getContentResolver().delete(uri, null, null);
		}
		// 1.读取sd卡上的xml文件
		// Xml.newPullParser();

		// 2.读取max

		// 3.读取每一条短信信息,body date type address

		// 4.把短信插入到系统短息应用。

		ContentValues values = new ContentValues();
		values.put("body", "woshi duanxin de neirong");
		values.put("date", "1395045035573");
		values.put("type", "1");
		values.put("address", "5558");
		context.getContentResolver().insert(uri, values);
	}
}

调用方式:

try {
					SmsUtils.backupSms(getApplicationContext(), new BackUpCallBack() {
						@Override
						public void onSmsBackup(int progress) {
							pd.setProgress(progress);
						}
						@Override
						public void beforeBackup(int max) {
							pd.setMax(max);
						}
					});
					runOnUiThread(new Runnable() {
						@Override
						public void run() {
							Toast.makeText(AtoolsActivity.this, "备份成功", 0).show();
						}
					});
				} catch (Exception e) {
					e.printStackTrace();
					runOnUiThread(new Runnable() {
						@Override
						public void run() {
							Toast.makeText(AtoolsActivity.this, "备份失败", 0).show();
						}
					});
				}finally{
					pd.dismiss();
				}
时间: 2024-11-02 10:43:09

Java中回调函数编写的相关文章

js中回调函数问题,程序进不了回调函数

问题描述 js中回调函数问题,程序进不了回调函数 我这段代码的回调函数哪出错,请各位大神指教 function req(){ createRequest(); var zipcode=document.getElementById(""zipcode"").value; var url=""b.jsp?zipcode="" + escape(zipcode); request.open(""POST&quo

jsonp-小白:js中回调函数处理后的数据如何保存?

问题描述 小白:js中回调函数处理后的数据如何保存? 主要的函数为: function Ajax(asc, url, data, func) { $.ajax({ // asc: false, async: asc, //type: "post", //dataType: "json", type: "get", dataType: "jsonp", //jsonp: "Callback", // json

js中回调函数的执行顺序

问题描述 js中回调函数的执行顺序 代码是调用了地图api函数,里面有个回调函数,想在回调函数里把值赋给全局变量,但是回调函数之后的代码里全局变量的值没变,具体见代码: <script type="text/javascript"> //基本地图加载 var map = new AMap.Map("container", { resizeEnable: true, //地图中心点 zoom: 13 //地图显示的缩放级别 }); var g=18; AM

playsoundeffect-audioservice.java中playSoundEffect()函数里 关于形参的含义

问题描述 audioservice.java中playSoundEffect()函数里 关于形参的含义 onplaySoundEffect(int effectType ,int volume)函数里 关于参数int effectType ,int volume 代表的是什么意思,volume在log上显示值一直都为-1000,以及volFloat值代表的是百分比吗?它的计算过程能详细说明下吗?"volFloat = (float)Math.pow(10, (float)sSoundEffect

对象-java中compareTo函数可以在同一个类中重写多次吗?

问题描述 java中compareTo函数可以在同一个类中重写多次吗? 我有一个对象数组,想按照不同属性对这个数组进行排序.但是如果重写compareTo函数的话好像只能按照某一个属性进行排序.现在我既想按照年龄又想按照分数排序,那应该怎么写呢? 解决方案 不行,一个Comparable对应一种顺序标准,你这样按年龄又按分数,明显是两个定制顺序,结果自然是两种.建议要么合成一个逻辑:要么用两个集合来存放.

java中的函数的调用问题

问题描述 java中的函数的调用问题 新人初学java,有这样一个比较弱智的问题一直没有搞懂 我不知道在一个类中的函数方法能不能互相调用 public class A{ void b(){} void a(){ b(): } 我不知道这样对不对,麻烦各位了,谢谢 } 解决方案 这样是可以,类中的函数可以互调,对所以可见的函数都可以互调. 解决方案二: 可以的,方法本身也可以调用自己 解决方案三: 现在有一个Java函数,如下:......答案就在这里:请教c++中调用Java函数问题 解决方案四

我是新人,怎样实现中mfc中实现对自己DLL中回调函数的接收

问题描述 我是新人,怎样实现中mfc中实现对自己DLL中回调函数的接收 我在消息函数中执行自己的DLL中的函数.正确的话是系统会执行该函数的响应函数,可在MFC中我的响应函数未被执行,这是为什么?? 解决方案 有什么提示错误?dll没有正确加载? 解决方案二: 没有提示什么,只是我调试根本没有进入过响应函数,程序还可以正常运行 解决方案三: 没有提示什么,只是我调试根本没有进入过响应函数,程序还可以正常运行

对js中回调函数的一些看法_javascript技巧

最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做了android之后更加感觉到手机端开发的重要性,现在做native App  和Web App是主流,也就是说现在各种基于浏览器的web app框架也会越来越火爆了,做js的也越来越有前途.我也决定从后端开发渐渐向前端开发和手机端开发靠拢,废话不说了,我们来切入正题"js的回调函数"相关的东西. 说起回调函数,好多人虽然知道意思,但是还是一知半解.至于怎么用,还是有点糊涂.网上的一些

C++中回调函数(CallBack)的用法分析_C 语言

本文实例分析了C++中回调函数(CallBack)的用法.分享给大家供大家参考.具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过. 其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即"this"指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员.这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员.由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时