android导出txt格式通讯录

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends Activity implements OnClickListener {
    private Button exportBtn;// 导出按钮
    private TextView showText;// 显示进度的文本
    // 导出txt的存放位置
    private final static String OUTPUT_PATH = Environment
            .getExternalStorageDirectory() + "/我的联系人.txt";
    private static final int OUTPUT_FAIL = 0;// 导出失败标识
    private static final int OUTPUT_SUCCESS = 1;// 导出成功标识
    private static int count;// 导出联系人的计数
    private Thread mOutputThread;// 导出联系人线程
    // 空格
    private static final String SPACE_1 = " ";
    private static final String SPACE_2 = SPACE_1 + SPACE_1;
    private static final String SPACE_4 = SPACE_2 + SPACE_2;
    private static final String SPACE_8 = SPACE_4 + SPACE_4;
    private static final String SPACE_11 = SPACE_8 + SPACE_2 + SPACE_1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        exportBtn = (Button) findViewById(R.id.main_btn_export);
        exportBtn.setOnClickListener(this);
        showText = (TextView) findViewById(R.id.main_tv_show);
    }
 
    @Override
    public void onClick(View v) {
        if (v == exportBtn) {
            outputContact();
        }
    }
 
    /**
     * 导出联系人入口
     */
    private void outputContact() {
        File file = new File(OUTPUT_PATH);
        if (!file.exists()) {
            startOutputContact();
        } else {
            createDialog(this, "警告", "我的联系人.txt已经存在,是否覆盖?");
        }
    }
 
    /**
     * 创建提示对话框
     *
     * @param context
     * @param title
     * @param message
     */
    private void createDialog(Context context, String title, String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                startOutputContact();
            }
        });
        builder.setNeutralButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                dialog.cancel();
            }
        });
        builder.show();
    }
 
    /**
     * 开启导出联系人子线程
     */
    private void startOutputContact() {
        setOutputWidgetEnabled(false);
        showText.setText("正在导出联系人...");
        if (mOutputThread != null) {
            mOutputThread.interrupt();
            mOutputThread = null;
        }
        mOutputThread = new Thread(new OutputRunnable(this));
        if (mOutputThread != null) {
            mOutputThread.start();
        }
    }
 
    /**
     * 设置导出组件的可用性
     */
    private void setOutputWidgetEnabled(boolean enabled) {
        exportBtn.setEnabled(enabled);
        if (!enabled) {
            showText.setText("");
        }
    }
 
    class OutputRunnable implements Runnable {
        private Context context;
 
        public OutputRunnable(Context context) {
            this.context = context;
        }
 
        @Override
        public void run() {
            boolean result = doOutputContact(context);
            if (result) {
                handler.sendEmptyMessage(OUTPUT_SUCCESS);
            } else {
                handler.sendEmptyMessage(OUTPUT_FAIL);
            }
        }
    }
 
    /**
     * 处理UI提示相关
     */
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == OUTPUT_SUCCESS) {
                showText.setText((String.format("已成功导出 %d 条联系人记录", count)));
                setOutputWidgetEnabled(true);
            } else if (msg.what == OUTPUT_FAIL) {
                showText.setText("导入联系人失败");
                setOutputWidgetEnabled(true);
            }
        }
    };
 
    /**
     * 从数据库中导出联系人
     *
     * @param context
     * @return 是否成功
     */
    private boolean doOutputContact(Context context) {
        count = 0;
        try {
            String result = readFromContactDatabase(context);
            writeFile(OUTPUT_PATH, result);
        } catch (Exception e) {
            return false;
        }
        return true;
    }
 
    /**
     * 从数据库中读取联系人相关信息
     *
     * @param context
     * @return 信息结果
     */
    private String readFromContactDatabase(Context context) {
        StringBuilder resultBuilder = new StringBuilder();
        Cursor cursor = context
                .getContentResolver()
                .query(ContactsContract.Data.CONTENT_URI,
                        new String[] { StructuredName.DISPLAY_NAME,
                                Data.RAW_CONTACT_ID }, Data.MIMETYPE + "= ?",
                        new String[] { StructuredName.CONTENT_ITEM_TYPE }, null);
        while (cursor.moveToNext()) {
            // 得到名称和每一行记录的ID
            String displayName = cursor.getString(0);
            int id = cursor.getInt(1);
            // 得到电话号码的游标
            Cursor mobileCursor = context.getContentResolver().query(
                    ContactsContract.Data.CONTENT_URI,
                    new String[] { Phone.NUMBER },
                    Data.RAW_CONTACT_ID + " = " + id + " AND " + Data.DATA2
                            + " = " + 2, null, null);
            String mobileNum = "";
            if (mobileCursor.moveToNext()) {
                mobileNum = mobileCursor.getString(0);
            }
            mobileCursor.close();
            // 得到家庭电话
            Cursor homeCursor = context.getContentResolver().query(
                    ContactsContract.Data.CONTENT_URI,
                    new String[] { Phone.NUMBER },
                    Data.RAW_CONTACT_ID + " = " + id + " AND " + Data.DATA2
                            + " = " + 1, null, null);
            String homeNum = "";
            if (homeCursor.moveToNext()) {
                homeNum = homeCursor.getString(0);
            }
            homeCursor.close();
            if (displayName != null && !"".equals(displayName)) {
                String result = displayName + SPACE_4;
                if ("".equals(mobileNum)) {
                    result += SPACE_11;
                } else {
                    result += mobileNum;
                }
                result += SPACE_8 + homeNum + '\n';
                String checkString = resultBuilder.toString();
                if (!checkString.contains(result)
                        && ("".equals(mobileNum) || !checkString
                                .contains(mobileNum))) {
                    resultBuilder.append(result);
                    count++;
                }
            }
        }
        cursor.close();
        return resultBuilder.toString();
    }
 
    /**
     * 将联系人信息写入SD
     *
     * @param path
     * @param info
     */
    private void writeFile(String path, String info) {
        try {
            File file = new File(path);
            FileWriter writer = new FileWriter(file, false);
            writer.write(info);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
                    android:layout_width="match_parent" 
                    android:layout_height="match_parent" 
                    android:orientation="vertical">
 
    <button 
            android:id="@+id/main_btn_export" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:text="导出联系人">
    </button>
    <textview 
            android:id="@+id/main_tv_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"> 
    </textview>
</linearlayout>
<uses-permission android:name="android.permission.READ_CONTACTS">
<uses-permission android:name="android.permission.WRITE_CONTACTS">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值