Android(java)学习笔记69:短信发送器

1. 一般我们第一步都是先创建这个main.xml布局文件,这是良好的习惯:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView
 8         android:layout_width="fill_parent"
 9         android:layout_height="wrap_content"
10         android:text="@string/input_number" />//android:text下面都是类似的,都是在string.xml下创建字符资源,然后利用@string/xxx
11 
12     <EditText
13         android:id="@+id/et_number"
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:lines="1"
17         android:numeric="integer" >
18     </EditText>
19 
20     <TextView
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:text="@string/input_content" />
24 
25     <EditText
26         android:id="@+id/et_content"
27         android:layout_width="match_parent"
28         android:layout_height="wrap_content"
29         android:lines="4" />
30 
31     <Button
32         android:layout_width="wrap_content"
33         android:layout_height="wrap_content"
34         android:onClick="send"
35         android:text="@string/send" />
36 
37 </LinearLayout>

这个布局文件的效果图如下:

下面我们进入源代码:

 1 package cn.itcast.sms;
 2 
 3 import java.util.ArrayList;
 4 
 5 import android.app.Activity;
 6 import android.os.Bundle;
 7 import android.telephony.SmsManager; //gsm cdma 3g
 8 import android.util.Log;
 9 import android.view.View;
10 import android.widget.EditText;
11 import android.widget.Toast;
12 
13 public class MainActivity extends Activity {
14     private static final String TAG = "MainActivity";
15     private EditText mEtNumber;
16     private EditText mEtContent;
17     
18     
19     
20     @Override
21     public void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.main6);
24 //        mEtContent = (EditText) this.findViewById(R.id.et_content);
25 //        mEtNumber = (EditText) this.findViewById(R.id.et_number);
26         
27     }
28     
29     
30     
31     public void send(View view){
32         String number = mEtNumber.getText().toString().trim();
33         String content = mEtContent.getText().toString().trim();
34         if("".equals(number)||"".equals(content)){
35             //提示用户 短信的接收人 或者 内容不能为空 
36             // 上下文 其实就是一个全局的对象  
37             Toast.makeText(this, R.string.error_message, Toast.LENGTH_LONG).show();
38             return ;
39         }else{
40             Log.i(TAG,"发送短信  接受者"+number+" 内容"+content);
41             SmsManager smsmanager = SmsManager.getDefault();
42             //sentIntent, deliveryIntent延期的意图 , 
43             // sentintent 发送报告 
44             // deliveryIntent 送达报告 
45             //smsmanager.sendTextMessage(number, null, content, null, null);
46             
47             //一条短信最大的文本长度 是多少 ? 
48             // 中文 70 汉字  英文 160字符
49             ArrayList<String> messages = smsmanager.divideMessage(content);
50             for(String message : messages){
51                 smsmanager.sendTextMessage(number, null, message, null, null);
52             }
53         }
54     }
55 }
备注:   SmsManager smsmanager = SmsManager.getDefault();
如果单单就不想被其他实例化:那就直接在这个构造函数中private限定。但是那样你自己也用不了。
单例模式 只可以创建一个实例,外面的类调用的话只能是这个类已经创建好的实例。代码给你看看:

public class Foo {
private EagerSingleton() { } //私有的构造函数 外面不能创建新的实例
private static Foo foo = new Foo(); //类中自己创建一个实例
public static Foo getInstance(){//对外面调用你的实例留个方法

return foo;
}
}
 
原文地址:https://www.cnblogs.com/hebao0514/p/4520851.html