av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android短信備份及數(shù)據(jù)插入實(shí)現(xiàn)代碼解析

瀏覽:25日期:2022-09-21 17:06:43

實(shí)現(xiàn)備份短信到xml文件和像短信中插入一條數(shù)據(jù)

一、實(shí)現(xiàn)短信將備份到xml文件中

在布局文件中定義一個(gè)按鈕,定義點(diǎn)擊事件為copyClick

MainActivity.java:

package com.lgqrlchinese.heima76android_copysms;import android.Manifest;import android.content.pm.PackageManager;import android.database.Cursor;import android.net.Uri;import android.os.Environment;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Xml;import android.view.View;import android.widget.Toast;import org.xmlpull.v1.XmlSerializer;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class MainActivity extends AppCompatActivity { //動(dòng)態(tài)獲取權(quán)限 static final String[] PERMISSION = new String[]{ Manifest.permission.READ_SMS, Manifest.permission.WRITE_EXTERNAL_STORAGE, }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //動(dòng)態(tài)獲取權(quán)限 MyPermission(); } //點(diǎn)擊按鈕查詢短信數(shù)據(jù)庫(kù)內(nèi)容,然后備份 public void copyClick(View view) { try { //獲取xml序列化實(shí)例 XmlSerializer serializer = Xml.newSerializer(); //設(shè)置序列化參數(shù) File file = new File(Environment.getExternalStorageDirectory().getPath(), 'smsBackUp.xml'); FileOutputStream fos = new FileOutputStream(file); serializer.setOutput(fos, 'utf-8'); //開始寫xml文檔的開頭 serializer.startDocument('utf-8', true); //開始寫根節(jié)點(diǎn) serializer.startTag(null, 'smss'); //短信數(shù)據(jù)庫(kù)內(nèi)容也通過(guò)內(nèi)容提供者暴露出來(lái),所以我們只需要通過(guò)內(nèi)容解析者去操作數(shù)據(jù)庫(kù) Uri uri = Uri.parse('content://sms/'); Cursor cursor = getContentResolver().query(uri, new String[]{'address', 'date', 'body'}, null, null, null); while (cursor.moveToNext()) {String address = cursor.getString(0);String date = cursor.getString(1);String body = cursor.getString(2);//寫sms節(jié)點(diǎn)serializer.startTag(null, 'sms');//寫address節(jié)點(diǎn)serializer.startTag(null, 'address');serializer.text(address);serializer.endTag(null, 'address');//寫body節(jié)點(diǎn)serializer.startTag(null, 'body');serializer.text(body);serializer.endTag(null, 'body');//寫date節(jié)點(diǎn)serializer.startTag(null, 'date');serializer.text(date);serializer.endTag(null, 'date');serializer.endTag(null, 'sms'); } serializer.endTag(null, 'smss'); serializer.endDocument(); } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println('異常1'); } catch (IOException e) { e.printStackTrace(); System.out.println('異常2'); } } //動(dòng)態(tài)獲取權(quán)限 public void MyPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { //Android 6.0申請(qǐng)權(quán)限 ActivityCompat.requestPermissions(this, PERMISSION, 1); } else { Toast.makeText(this, '成功', Toast.LENGTH_SHORT).show(); } }}

當(dāng)然權(quán)限是必要的

<uses-permission android:name='android.permission.READ_SMS'/> <uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE'/>

這樣就在SD卡根目錄備份了xml文件

在真機(jī)6.0測(cè)試中遇到存儲(chǔ)address崩潰問(wèn)題,調(diào)試好久。先打印addredss,沒(méi)有問(wèn)題;存儲(chǔ)死數(shù)據(jù)沒(méi)有問(wèn)題,最后發(fā)現(xiàn)在輸出打印室有個(gè)address為null。查看手機(jī),是因?yàn)橛袀€(gè)短信草稿,我想了兩個(gè)都能想到的的解決辦法:

1.刪除或發(fā)送手機(jī)里的草稿

2.在代碼中進(jìn)行判斷

if (address != null) { serializer.startTag(null, 'address'); serializer.text(address); serializer.endTag(null, 'address');} else { serializer.text('這是草稿');}

二、向短信的數(shù)據(jù)庫(kù)中插入數(shù)據(jù)(5.0及之后就不允許外部應(yīng)用修改,直允許讀取,不做過(guò)多記錄)

import android.Manifest;import android.content.ContentValues;import android.content.pm.PackageManager;import android.net.Uri;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Toast;public class MainActivity extends AppCompatActivity { //動(dòng)態(tài)獲取權(quán)限 static final String[] PERMISSION = new String[]{ Manifest.permission.READ_SMS, }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyPermission(); } //點(diǎn)擊按鈕在短信數(shù)據(jù)庫(kù)插入數(shù)據(jù) public void insertClick(View view) { Uri uri = Uri.parse('ocntent://sms'); ContentValues values = new ContentValues(); values.put('address', '17865318803'); values.put('body', '我是你的影子'); values.put('date', System.currentTimeMillis()); getContentResolver().insert(uri, values); } //動(dòng)態(tài)獲取權(quán)限 public void MyPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { //Android 6.0申請(qǐng)權(quán)限 ActivityCompat.requestPermissions(this, PERMISSION, 1); } else { Toast.makeText(this, '成功', Toast.LENGTH_SHORT).show(); } }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 久久国产精品72免费观看 | 成人在线精品视频 | 香蕉国产在线视频 | 九久久 | 日韩高清中文字幕 | 国产一级免费视频 | 夜夜操天天艹 | 综合视频在线 | japanhd美女动 | 黄色在线观看网址 | 在线中文视频 | 91精品国产乱码久久久久久久久 | 精品国产一区二区在线 | 国产成人精品一区二 | 日韩国产精品一区二区三区 | 一级片在线视频 | 日本不卡免费新一二三区 | 精品国产91久久久久久 | 九九热精品视频 | 中文av网站 | 亚洲国产成人精品女人久久久 | 免费观看成人鲁鲁鲁鲁鲁视频 | 99精品欧美一区二区三区综合在线 | av在线一区二区三区 | 国产大片黄色 | 久久综合香蕉 | 国产成人精品综合 | 视频一二三区 | 中文字幕亚洲一区二区三区 | 国产激情在线 | 四虎永久免费黄色影片 | 精品国产女人 | 亚洲国产精品99久久久久久久久 | 精品综合在线 | 精品国产高清一区二区三区 | 天天艹日日干 | 日韩淫片免费看 | 免费在线观看成人av | 亚洲天堂av一区 | 一级片av| 在线看亚洲 |