Android心得4--短信
1. 短信编辑器的代码:
packagecn.csdn.hr.activity;
//倒入相应的包,在此不多说了
importjava.util.List;
importandroid.app.Activity;
importandroid.app.PendingIntent;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.telephony.SmsManager;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.Toast;
publicclass SmsActivity extends Activity {
//声明一些要用到的变量,并将其私有化
private Button sendBtn;
private EditText etPhone;
private EditText etSms;
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
// 设置显示的视图
setContentView(R.layout.main);
// 获取对应的组件对象
sendBtn = (Button)findViewById(R.id.sendBtn);
etPhone = (EditText) findViewById(R.id.etphone);
etSms = (EditText)findViewById(R.id.etsms);
// 注册按钮的点击事件
sendBtn.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
// 获取电话号码 和短信的内容
String phone =etPhone.getText().toString();
String content =etSms.getText().toString();
// 短信的管理器对象
SmsManager smsManager =SmsManager.getDefault();
// 发送短信
PendingIntent pendingIntent =PendingIntent.getBroadcast(
SmsActivity.this, 0, newIntent(), 0);
// 拆分成多个短信 content>153字母大于 67汉字 才能够拆分
if(content.length() > 70) {
List<String>contents = smsManager.divideMessage(content);
for(String str : contents) {
smsManager.sendTextMessage(phone, null,str,
pendingIntent, null);
}
}else {
// 利用管理器的方法 发送短信smsManager.sendTextMessage(phone,null, content,
pendingIntent, null);
}
//最后二个参数为短信已发送的广播意图,最后一个参数为短信对方已收到短信的广播意图
Toast.makeText(SmsActivity.this,"短信发送成功", Toast.LENGTH_LONG).show();
// 意图 要干什么事情 必须有干事情的权限 在项目清单文件(AndroidManifest.xml)中添加
}
});
}
}
2.吐司设置
//Toast通知可以改变通知位置.
toast.setGravity(Gravity.TOP|Gravity.LEFT,0, 0);
//自定义吐司
Toasttoast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0, 0);
toast.setDuration(Toast.LENGTH_LONG);
//布局文件layout.xml
toast.setView(layout);
toast.show();
3.Uri简介
Uri代表了要操作的数据,Uri主要包含了两部分信息:<1>需要操作的ContentProvider ,<2>对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://
主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
要操作person表中id为10的记录,可以构建这样的路径:/person/10
要操作person表中id为10的记录的name字段, person/10/name
要操作person表中的所有记录,可以构建这样的路径:/person
要操作xxx表中的记录,可以构建这样的路径:/xxx
当然要操作的数据不一定来自数据库,也可以是文件、xml或网络等他存储方式,如下:
要操作xml文件中person节点下的name节点,可以构建这样的路径:/person/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uriuri = Uri.parse("content://cn.itcast.provider.personprovider/person")
4. UriMatcher类使用介绍
因为Uri代表了要操作的数据,所以我们经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。
UriMatcher类用于匹配Uri,它的用法如下:
首先第一步把你需要匹配Uri路径全部给注册上,如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
UriMatcher sMatcher = newUriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://cn.itcast.provider.personprovider/person路径,返回匹配码为1
sMatcher.addURI(“cn.itcast.provider.personprovider”,“person”, 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配content://cn.itcast.provider.personprovider/person/230路径,返回匹配码为2
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person/#”, 2);//#号为通配符
switch(sMatcher.match(Uri.parse("content://cn.itcast.provider.personprovider/person/10"))){
case 1
break;
case 2
break;
default://不匹配
break;
}
注册完需要匹配的Uri后,就可以使用sMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content://cn.itcast.provider.personprovider/person路径,返回的匹配码为1