android 数据存储----android短信发送器之文件的读写(手机+SD卡)
本文实践知识点有有三:
1.布局文件,android布局有相对布局,线性布局,绝对布局,表格布局,标签布局等。各个布局能够嵌套的。本文的布局文件就是线性布局的嵌套
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Telhint"
android:textSize="19sp"
android:textColor="#FFFFFF"
android:background="#000000"
/>
<EditText
android:id="@+id/Tel"
android:inputType="number"
android:layout_width="fill_parent"
android:layout_height="75sp"
android:textSize="30sp"
android:paddingLeft="10sp"
android:paddingRight="10sp"
android:background="@drawable/text1"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Smshint"
android:textSize="19sp"
android:textColor="#FFFFFF"
android:background="#000000"
/>
<EditText
android:id="@+id/Sms"
android:inputType="textMultiLine"
android:layout_width="fill_parent"
android:layout_height="180dip"
android:textSize="19sp"
android:minLines="10"
android:gravity="left"
android:background="@drawable/text2"
android:paddingTop="19sp"
android:paddingBottom="22sp"
android:paddingLeft="22sp"
android:paddingRight="15sp"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_marginTop="10sp"
android:layout_marginLeft="3sp"
android:id="@+id/button0"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:text="@string/send"
android:textColor="#7cfc00"
android:textSize="19sp"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:layout_marginTop="10sp"
android:layout_marginLeft="3sp"
android:text="@string/savephone"
android:textColor="#800080"
android:textSize="19sp" />
<Button
android:id="@+id/button6"
android:layout_marginTop="10sp"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:layout_marginLeft="3sp"
android:text="@string/savecache"
android:textColor="#800080"
android:textSize="19sp" />
<Button
android:id="@+id/button10"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:layout_marginTop="5sp"
android:layout_marginLeft="1sp"
android:layout_gravity="center"
android:text="@string/deletecache"
android:textColor="#800080"
android:textSize="19sp" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_marginTop="10sp"
android:layout_marginLeft="3sp"
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:text="@string/clear"
android:textColor="#ff0000"
android:textSize="19sp"
/>
<Button
android:layout_marginTop="10sp"
android:layout_marginLeft="3sp"
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:text="@string/savesdcard"
android:textColor="#800080"
android:textSize="19sp"
/>
<Button
android:layout_marginTop="10sp"
android:layout_marginLeft="3sp"
android:id="@+id/button7"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:text="@string/Readcache"
android:textColor="#800080"
android:textSize="19sp"
/>
<Button
android:id="@+id/button11"
android:layout_width="wrap_content"
android:layout_height="75sp"
android:text="@string/future"
android:layout_marginTop="2sp"
android:layout_marginLeft="1sp"
android:gravity="center"
android:textColor="#800080"
android:textSize="19sp" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/button4"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_marginTop="10sp"
android:layout_marginLeft="1sp"
android:text="@string/Readphone"
android:textColor="#0000ff"
android:textSize="19sp" />
<Button
android:id="@+id/button5"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_marginTop="10sp"
android:layout_marginLeft="1sp"
android:text="@string/Readsdcard"
android:textColor="#0000ff"
android:textSize="19sp" />
<Button
android:id="@+id/button8"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_marginTop="10sp"
android:layout_marginLeft="1sp"
android:text="@string/deletephone"
android:textColor="#0000ff"
android:textSize="19sp" />
<Button
android:id="@+id/button9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10sp"
android:layout_marginLeft="1sp"
android:text="@string/deletesd"
android:textColor="#0000ff"
android:textSize="19sp" />
</LinearLayout>
</LinearLayout>
l
2.布局文件里使用字符以及Java源码中使用的字符最好在string.xml先定义,然后再引用
<?
xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MySMS</string>
<string name="Telhint">请输入号码:</string>
<string name="Smshint">请输入短信内容:</string>
<string name="send">发送</string>
<string name="OK">发送成功</string>
<string name="savephone">to-手机</string>
<string name="savesdcard">to-SD卡</string>
<string name="ReadSD">读SD卡信息</string>
<string name="clear">清除</string>
<string name="action_settings">Settings</string>
<string name="Readphone">读手机短信</string>
<string name="Readsdcard">读sd卡短信</string>
<string name="future"> --NULL-- </string>
<string name="savecache">to-cache</string>
<string name="Readcache">读cache</string>
<string name="deletephone">删手机短信</string>
<string name="deletesd">删sd卡短信</string>
<string name="deletecache">C-Cache</string>
</resources>
3.涉及的安全方面的业务。必需在androidMainifest.xml注冊,如发送短信,拨打电话。读取SD卡数据等
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>"
当中当中竖屏翻转,也须要在这里注冊
android:screenOrientation="portrait"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mysms"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>"
<application
android:allowBackup="true"
android:icon="@drawable/sms"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name="com.example.mysms.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
4.操作文件的功能实现最好新建一个业务类
package com.example.FileService;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Fileservice {
private Context context;
public Fileservice(Context context) {
this.context = context;
}
private final String tag ="mytag";
public void SavefileToPhone(String filename,String content) throws Exception
{
Log.e(tag, "hello,start save file to phone internal");
FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
Log.e(tag, "hello,open file is ok");
outStream.write(content.getBytes());
outStream.close();
}
public void SavefileToCache(String filename,String content) throws Exception
{
File cachedir = context.getCacheDir();
File file=new File(cachedir,filename);
OutputStream os = new FileOutputStream(file);
os.write(content.getBytes());
os.close();
}
public void SavefileToSD(String filename,String content) throws Exception
{
Log.e(tag,"SD card is begint!");
File path= Environment.getExternalStorageDirectory();
Log.e(tag,"SD card save is start!");
File file=new File(path,filename);
Log.e(tag,"SD card file is creat!");
OutputStream os = new FileOutputStream(file);
Log.e(tag,"SD card outputstream is get!");
os.write(content.getBytes());
Log.e(tag,"SD card is write!");
os.close();
}
public String ReadfileToSD(String filename) throws Exception
{
File path= Environment.getExternalStorageDirectory();
int len = 0;
byte[] buffer = new byte[1024];
Log.e(tag, "hello,Read cache file begin");
File file=new File(path,filename);
Log.e(tag, "hello,get a file string");
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Log.e(tag, "hello,get a outstream");
FileInputStream InputStream = new FileInputStream(file);
Log.e(tag, "hello,get a Inputstream");
while((len=InputStream.read(buffer))!=-1)
{
outStream.write(buffer, 0, len);
}
byte[] data=outStream.toByteArray();
InputStream.close();
return new String (data);
}
public String ReadfileFromcache(String filename) throws Exception
{
int len = 0;
byte[] buffer = new byte[1024];
File cachedir = context.getCacheDir();
Log.e(tag, "hello,Read cache file begin");
File file=new File(cachedir,filename);
Log.e(tag, "hello,get a file string");
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Log.e(tag, "hello,get a outstream");
FileInputStream InputStream = new FileInputStream(file);
Log.e(tag, "hello,get a Inputstream");
while((len=InputStream.read(buffer))!=-1)
{
outStream.write(buffer, 0, len);
}
byte[] data=outStream.toByteArray();
InputStream.close();
return new String (data);
}
public String ReadfileFromPhone(String file) throws Exception
{
int len = 0;
byte[] buffer = new byte[1024];
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
FileInputStream InputStream= context.openFileInput(file);
while((len=InputStream.read(buffer))!=-1)
{
outStream.write(buffer, 0, len);
}
byte[] data=outStream.toByteArray();
return new String (data);
}
}
注意android操作文件有两种方式:
一。
使用context类,context提供了输入输出流接口,一般用于读写手机内部文件
二。.使用file类。这个是更顶层的类。通过文件路径和文件名称。能够用于读写系统不论什么地方的文件,一般用于读写cache。SD卡。其它路径文件。
5.activity类,用于GUI操作
package com.example.mysms;
import java.io.File;
import java.util.ArrayList;
import com.example.FileService.Fileservice;
import android.support.v7.app.ActionBarActivity;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.os.Environment;
public class MainActivity extends ActionBarActivity {
EditText text1;
EditText text2;
Button bt,bt1,bt2,bt3,bt4,bt5,bt6,bt7,bt8,bt9,bt10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text1=(EditText)findViewById(R.id.Tel);
text2=(EditText)findViewById(R.id.Sms);
bt=(Button)findViewById(R.id.button0);
bt1=(Button)findViewById(R.id.button1);
bt2=(Button)findViewById(R.id.button2);
bt3=(Button)findViewById(R.id.button3);
bt4=(Button)findViewById(R.id.button4);
bt5=(Button)findViewById(R.id.button5);
bt6=(Button)findViewById(R.id.button6);
bt7=(Button)findViewById(R.id.button7);
bt8=(Button)findViewById(R.id.button8);
bt9=(Button)findViewById(R.id.button9);
bt10=(Button)findViewById(R.id.button10);
bt.setOnClickListener(listener);
bt1.setOnClickListener(listener);
bt2.setOnClickListener(listener);
bt3.setOnClickListener(listener);
bt4.setOnClickListener(listener);
bt5.setOnClickListener(listener);
bt6.setOnClickListener(listener);
bt7.setOnClickListener(listener);
bt8.setOnClickListener(listener);
bt9.setOnClickListener(listener);
bt10.setOnClickListener(listener);
}
private OnClickListener listener =new OnClickListener()
{
String Tel;
String Sms;
String filename ;
private final String Tag=new String("Activity_tag");
@Override
public void onClick(View v) {
Button btx=(Button)v;
switch(btx.getId())
{
case R.id.button0:
Tel=text1.getText().toString();
Sms = text2.getText().toString();
if(Tel.equals("")==true)
{
Toast.makeText(MainActivity.this, "请输入号码!", Toast.LENGTH_LONG).show();
return;
}
if(Sms.equals("")==true)
{
Toast.makeText(MainActivity.this, "请输入信息。", Toast.LENGTH_LONG).show();
return;
}
SmsManager smsm=SmsManager.getDefault();
ArrayList<String> texts=smsm.divideMessage(Sms);
for(String text:texts)
{
smsm.sendTextMessage(Tel, null, text, null, null);
}
text1.setText("");
text2.setText("");
Toast.makeText(MainActivity.this, R.string.OK, Toast.LENGTH_LONG).show();
break;
case R.id.button1:
Tel=text1.getText().toString();
Sms = text2.getText().toString();
filename = Tel+".txt";
Fileservice savetophone = new Fileservice(getApplicationContext());
try
{
savetophone.SavefileToPhone(filename, Sms);
Toast.makeText(getApplicationContext(), "保存到手机成功", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "文件路径为"+getApplicationContext().getFilesDir().toString(), Toast.LENGTH_SHORT).show();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "保存到手机失败", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button2:
text2.setText("");
Toast.makeText(getApplicationContext(), "清除成功", Toast.LENGTH_SHORT).show();
break;
case R.id.button3:
Tel=text1.getText().toString();
Sms = text2.getText().toString();
filename = Tel+".txt";
Fileservice service3 = new Fileservice(getApplicationContext());
try
{
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
service3.SavefileToSD(filename, Sms);
File path= Environment.getExternalStorageDirectory();
String PATH = path.toString();
Toast.makeText(getApplicationContext(), "保存SD卡中的短信成功", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "SD卡路径为"+PATH, Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), "SD卡无法识别", Toast.LENGTH_SHORT).show();
}
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "保存SD卡中的短信失败", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button4:
Tel=text1.getText().toString();
filename = Tel+".txt";
Fileservice service = new Fileservice(getApplicationContext());
try
{ Sms=service.ReadfileFromPhone(filename);
text2.setText(Sms);
Toast.makeText(getApplicationContext(), "读取手机中的短信成功", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "文件路径为"+getApplicationContext().getFilesDir().toString(), Toast.LENGTH_SHORT).show();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "读取手机中的短信失败", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button5:
Tel=text1.getText().toString();
filename = Tel+".txt";
Fileservice service4 = new Fileservice(getApplicationContext());
try
{
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
text2.setText(service4.ReadfileToSD(filename));
Toast.makeText(getApplicationContext(), "读取SD卡中的短信成功", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), "SD卡无法识别", Toast.LENGTH_SHORT).show();
}
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "读取SD卡中的短信失败", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button6:
Tel=text1.getText().toString();
Sms = text2.getText().toString();
filename = Tel+".txt";
Fileservice savecache = new Fileservice(getApplicationContext());
try
{
savecache. SavefileToCache(filename, Sms);
Toast.makeText(getApplicationContext(), "保存到cache成功", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "文件路径为"+getApplicationContext().getCacheDir().toString(), Toast.LENGTH_SHORT).show();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "保存到手机失败", Toast.LENGTH_SHORT).show();
}
case R.id.button7:
Tel=text1.getText().toString();
filename = Tel+".txt";
try{
Fileservice service1=new Fileservice(getApplicationContext());
text2.setText(service1.ReadfileFromcache(filename));;
Toast.makeText(getApplicationContext(), "读取cache中的数据成功", Toast.LENGTH_SHORT).show();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "读取cache中的数据失败", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button8:
Tel=text1.getText().toString();
filename = Tel+".txt";
getApplicationContext().deleteFile(filename);
Toast.makeText(getApplicationContext(), "删除手机短信的短信成功", Toast.LENGTH_SHORT).show();
break;
case R.id.button9:
Tel=text1.getText().toString();
filename = Tel+".txt";
try
{
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
File file=new File(Environment.getExternalStorageDirectory(),filename);
file.delete();
Toast.makeText(getApplicationContext(), "删除SD卡中的短信成功", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), "SD卡无法识别", Toast.LENGTH_SHORT).show();
}
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "删除SD卡中的短信失败", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button10:
Log.i(Tag,"Clear the cache\n");
File cachedir = getApplicationContext().getCacheDir();
Log.i(Tag,"Get the patch\n");
File file=new File(cachedir,filename);
Log.i(Tag,"Get the file structor\n");
file.delete();
Log.i(Tag,"Clear the cache end\n");
Toast.makeText(getApplicationContext(), "删除Cache中数据成功", Toast.LENGTH_SHORT).show();
break;
}
}
};
}
在本实践中还要学会调试方式:
1.採用logcat查看日志调试
2.通过File explorer 导出文件调试
3.单元測试调试
4. 怎样通过google 官方手冊学习API的使用
重要类;context,上下文,一般一个类实例化后就有一个上下文。
測试结果:
android 数据存储----android短信发送器之文件的读写(手机+SD卡)的更多相关文章
- android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)
本文实践知识点有有三: 1.布局文件,android布局有相对布局.线性布局,绝对布局.表格布局.标签布局等,各个布局能够嵌套的. 本文的布局文件就是线性布局的嵌套 <LinearLayout ...
- Android系统应用Mms之Sms短信发送流程(Mms应用部分)二
1. 新建一条短信, 在发送短信之前, 首先创建的是一个会话Conversation, 以后所有与该接收人(一个或多个接收人)的消息交互, 都在该会话Conversation中. ComposeMes ...
- Android短彩信源码解析-短信发送流程(三)
3.短信pdu的压缩与封装 相关文章: ------------------------------------------------------------- 1.短信发送上层逻辑 2.短信发送f ...
- Android(java)学习笔记38:Android 短信发送
1.第一种可以调用系统内部的短信程序. 之前我曾经出现过一个bug就是报错: android.content.ActivityNotFoundException: No Activity found ...
- Android短彩信源码解析-短信发送流程(二)
转载请注明出处:http://blog.csdn.net/droyon/article/details/11699935 2,短彩信发送framework逻辑 短信在SmsSingleRecipien ...
- android基础知识点复习之短信发送
界面布局: activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an ...
- Android中实现短信发送的一种方式
SendSmsActivity.java: package com.test.smsmangerdemo.sendsmsactivity; import android.support.v7.app. ...
- 基于android 社会的app短信分享 发送回调事件的实现
摘要 前一段时间.由于项目的需要,采用ShareSDK该共享功能.其中包含 短信股吧.和呼叫系统,以分享要与成功处理服务器交互的消息后,(我不在乎在这里,收到.仅仅关心发出去了).可是ShareSDk ...
- Android Sms短信发送
界面布局: 具体代码: private void sendSms() { // 获取电话号码和短信内容 String number = number1.getText().toString(); St ...
随机推荐
- 做移动应用使用地图API时需要注意的问题
最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图.毕竟Google地图在技 ...
- Hackerrank--Emma and sum of products (FFT)
题目链接 Emma is really fond of integers and loves playing with them. Her friends were jealous, and to t ...
- 工控安全入门(二)—— S7comm协议
在上一次的文章中我们介绍了施耐德公司的协议modbus,这次我们把目标转向私有协议,来看看另一家巨头西门子的S7comm.首先要说明,这篇文章中的内容有笔者自己的探索,有大佬们的成果,但由于S7com ...
- ubuntu 下安装 YouCompleteMe
1.安装用到的软件包 sudo apt-get install vim sudo apt-get install git sudo apt-get install subversion sudo ap ...
- Git同账号多平台配置
最近工作中使用到了Git,虽然以前学习过,但是已经忘的差不多了,遂将本次配置过程整理成笔记以备忘 生成公钥 ssh-keygen -t rsa -C "gana10007@163.com&q ...
- python邮件发送:普通文本、html、添加附件
# -*- coding: utf-8 -*- # @Time : 2019/9/19 13:46 # @Author : HuangWenjun # @Email : 350920551@qq.co ...
- 解释器模式(Interpreter、Context、Expression)
(给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子.) 解释器模式的定义是一种按照规定语法进行解析的方案,在现在项目中使用的比较少,其定义如下: Given ...
- day36 10-Hibernate中的事务:解决丢失更新
演示hibernate如何产生丢失更新的 丢失更新是怎么玩的?首先两个事务先都把它查出来. A事务里面去修改的数据没了,被B事务覆盖掉了.这是被B事务提交覆盖,B事务回滚也能覆盖.这就是丢失更新的效果 ...
- vuex的简单教程
首先安装vuex npm install vuex --save 然后创建store.js文件里写 import Vue from 'vue' import Vuex from 'vuex' Vue. ...
- T2848 列车调度(二分或dp)
题目背景 自行脑补, 题目描述 有N辆列车,标记为1,2,3,…,N.它们按照一定的次序进站,站台共有K个轨道,轨道遵从先进先出的原则.列车进入站台内的轨道后可以等待任意时间后出站,且所有列车不可后退 ...