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;
}
}