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();
}
Java中回调函数编写的更多相关文章
- java中回调函数的理解
一,案例一 "通常大家说的回调函数一般就是按照别人(李四)的定好的接口规范写,等待别人(张三)调用的函数,在C语言中,回调函数通常通过函数指针来传递:在Java中,通常就是编写另外一个类或类 ...
- java中回调函数的使用
package com.huawei.common; import java.sql.ResultSet;import java.sql.SQLException; /** * 回调函数 * @aut ...
- C++中回调函数(CallBack)的使用
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过. 其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而 ...
- html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结
Day27 html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...
- java基础-回调函数(callback)
java基础-回调函数(callback) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数 ...
- $.getJSON('url',function(data){}) 中回调函数不执行
$.getJSON('url',function(data){}) 中回调函数不执行 url 中的 json 格式不正确 ,浏览器返回并没有报错 {'湖北':[114.11438,30.849429] ...
- 关于C++与Java中虚函数问题的读书笔记
之前一直用C++编程,对虚函数还是一些较为肤浅的理解.可近期由于某些原因搞了下Java,发现有些知识点不熟,于是站在先驱巨人的肩上谈谈C++与Java中虚函数问题. Java中的虚函数 以下是段别人的 ...
- JAVA中字符串函数subString的用法小结
本篇文章主要是对JAVA中字符串函数subString的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 String str; str=str.substring(int begi ...
- Java中的函数对象
初次听说java中的函数对象可能,比较的陌生.可以类比着来理解一下,人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把 ...
随机推荐
- Settings.settings
项目的设置,有些设置是不能变的,有些设置是由用户决定的,Settings.settings都能搞定. 范围是应用程序级别的是只读属性,范围是用户级别的可读写 读取的方式是: Properties.Se ...
- MySQL 连接的使用
MySQL 连接的使用 在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用 MySQL 的 JOIN ...
- PHP 5 String 函数
PHP 5 String 函数 PHP String 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. 函数 描述 addcslashes() 返回在指定的字符前添加反斜杠的字符串. add ...
- 什么是 Docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 ...
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
新语法 方法引用Method references Lambda语法 Lambda语法在AndroidStudio中报错 Stream API 我正参加2016CSDN博客之星的比赛 希望您能投下宝贵 ...
- Elasticsearch+Hbase实现海量数据秒回查询
---------------------------------------------------------------------------------------------[版权申明:本 ...
- TCP发送源码学习(2)--tcp_write_xmit
一.tcp_write_xmit()将发送队列上的SBK发送出去,返回值为0表示发送成功.函数执行过程如下:1.检测拥塞窗口的大小.2.检测当前报文是否完全处在发送窗口内.3.检测报文是否使用nagl ...
- Android图表库MPAndroidChart(七)—饼状图可以再简单一点
Android图表库MPAndroidChart(七)-饼状图可以再简单一点 接上文,今天实现的是用的很多的,作用在统计上的饼状图,我们看下今天的效果 这个效果,我们实现,和之前一样的套路,我先来说下 ...
- Unity插件 - MeshEditor(八)模型镜像特效
将静态模型(带MeshFilter)按指定轴向.指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之前模型的顶点, ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...