Android(java)学习笔记86:案例短信发送器

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;       }}
 
时间: 2024-10-13 19:34:54

Android(java)学习笔记86:案例短信发送器的相关文章

Android 存储学习之保存系统短信到SD卡

本节学习,保存系统短信到SD卡中.既然是要保存系统短信到SD卡中,前提是先要拿到系统的短信,关于如何读取系统的短信,请看我的关于ContentProvider文章: Android 四大组件学习之ContentProvider三 既然知道了任务的目的,那我们就直接实现.我们先将系统的短信读出,然后保存到xml文件中,然后将xml文件写到sd卡中. 1: 先将系统短信读出 //得到ContentResolver ContentResolver cr = getContentResolver();

Android实现电话拨号器和短信发送器

电话拨号器和短信发送器是Android初学者很好的练习项目,今天就找了两个写得很不错的例子学习下 电话拨号器 实现原理:用户输入电话号码,当点击拨打的时候,由监听对象捕获,监听对象通过文本控件获取到用户输入的电话号码,由于系统已经实现了电话拨号功能,所以我们只需要调用这个功能就可以了. 步骤: 1.界面布局 2.编写Activity 3.使用意图过滤器激活电话拨号功能 4.添加电话服务权限(用手机的电话服务,要在清单文件AndroidManifest.xml中添加电话服务权限) 如图所示这三个控

Android 存储学习之保存系统短信到SD卡(使用XML序列化器)

上节中我们是手动拼接xml文件,但是上节中那样的做法会有一个问题,比如: //插入消息的内容 sBuffer.append("<body>"); sBuffer.append(sms.getBody() + "</body>"); sBuffer.append("</body>"); 我在插入消息内容的时候,在追加内容里面加了个 </body>. 这样就会出现解析错误的 所以这节我们使用xml的序列

Android学习笔记(2)——短信发送器

搬运自本人博客:http://www.xgezhang.com/android_sms.html 上一篇文章中我们学着写了一个电话拨号器,这里我们继续来写一个短信发送器. 同样的按一般app开发的步骤,首先先确定下UI界面,大致效果应该是这样: 那么界面要怎么完成了?这种布局可以采用线性布局来做,比较方便.这里还是采用的相对布局,先上xml文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2

Android学习--写一个发送短信的apk,注意布局文件的处理过程!!!

刚开始写Android程序如图发现使用了findViewById方法之后输出的话居然是null(空指针错误),也就是说这个方法没有成功.网上说这样写是在activity_main .xml去找这个ID所代表的控件,而现在使用的ADT在layout下除了activity_main .xml还多生成了一个fragment_main.xml.我就是把控件写在了后一个布局文件中.想请问下,使用什么样的方法是在fragment_main.xml去寻找控件呢? 回答:在PlaceHolderFragment

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据

java/android 设计模式学习笔记(12)---组合模式

这篇我们来介绍一下组合模式(Composite Pattern),它也称为部分整体模式(Part-Whole Pattern),结构型模式之一.组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别.这个最典型的例子就是数据结构中的树了,如果一个节点有子节点,那么它就是枝干节点,如果没有子节点,那么它就是叶子节点,那么怎么把枝干节点和叶子节点统一当作一种对象处理呢?这就需要用到组合模式了. 转

java/android 设计模式学习笔记(5)---对象池模式

这次要介绍一下对象池模式(Object Pool Pattern),这个模式为常见 23 种设计模式之外的设计模式,介绍的初衷主要是在平时的 android 开发中经常会看到,比如 ThreadPool 和 MessagePool 等. 在 java 中,所有对象的内存由虚拟机管理,所以在某些情况下,需要频繁创建一些生命周期很短使用完之后就可以立即销毁,但是数量很大的对象集合,那么此时 GC 的次数必然会增加,这时候为了减小系统 GC 的压力,对象池模式就很适用了.对象池模式也是创建型模式之一,

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl