热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Java语言的安卓编程之二十短消息发送

前一天学习了视图按键事件的监听。首先新建了一个自定义的视图,在自定义视图中,重新编了其构造函数和onDraw()方法。之后将该视图用于应用程序,最后添加该视图的按键监听器,在监听器中对KeyEvent

前一天学习了视图按键事件的监听。首先新建了一个自定义的视图,在自定义视图中,重新编了其构造函数和onDraw()方法。之后将该视图用于应用程序,最后添加该视图的按键监听器,在监听器中对KeyEvent类型的参数进行处理,判断用户按下哪个按键,之后对球员头像的坐标进行处理,最后使得整个视图失效,重绘视图。

今天,我们继续学习按键事件监听器的实现。前一天所学的事件监听器是内部类,也就是在MainActivity类内部定义的。那么今天学习外部类作为事件监听器。如果某个事件监听器需要被不同GUI界面中的组件使用,则需要将该监听器定义为外部类。今天实现的主要功能是将外部类作为主GUI界面按键的事件响应,当长按按键后,应用程序将指定消息发送给指定号码的设备。

1 外部类的定义

在Eclipse中新建一个名为“SendSms”的安卓项目。接下来在“SendSms->src->com.example.sendsms”包的右键菜单中选择“New->Class”,为该包添加一个名为SendSmsListener的类,该类实现了OnLongClickListener接口:

public class SendSmsListener implementsOnLongClickListener{

}

1.1实现接口方法

OnLongClickListener接口定义了一个onLongClick()方法,当长按视图时,该方法就会被调用。在SendSmsListener类中需要实现该方法。

    @Override

    public boolean onLongClick(View source)

    {

........
    }

1.1.1 获取短信的目的地址和内容

在onLongClick()方法中,首先获取发送短信的目的地址和内容。    

String addressStr = address.getText().toString();

    StringcOntentStr= content.getText().toString();

其中,address是用于输入目的地址的EditText控件,content是用于输入内容的EditText控件。通过以上代码,短信的目的地址和内容分别保存在了addressStr和contentStr中。

1.1.2 获取SmsManager

通过SmsManager类实现发送短信的功能。获取该类对象的方法如下所示

SmsManager smsManager = SmsManager.getDefault();

其中,getDefault()是SmsManager类的静态方法,所以通过该类就可以直接调用。该方法的作用是获取SmsManager的默认实例。

1.1.3 PendingIntent类

在发送消息时,要用到PendingIntent类。PendingIntent类是一种特殊的Intent。与Intent的区别在于Intent是马上执行,而PendingIntent不是马上执行,要等到指定的条件满足之后才能执行。以下代码获取了PendingIntent类的对象

PendingIntent sentIntent = PendingIntent.getBroadcast(act, 0,new Intent(), 0);

其中,getBroadcast()是PendingIntent类的静态方法,该函数的作用是创建用于广播的PendingIntent,其格式为

publicstatic PendingIntentgetBroadcast(Context context,

                                        int requestCode,

                                         Intent intent,

                                        int flags)

其中,参数context表示创建的PendingIntent要实现的广播的上下文;requestCode指定了发送者的私有请求码,该参数目前尚未使用;intent指定了要实现广播的intent;flags表示标志。该方法的返回值即为创建的PendingIntent类的对象。

1.1.4 发送短消息

通过SmsManager类的sendTextMessage()方法发送消息。

smsManager.sendTextMessage(addressStr, null, contentStr,sentIntent,null);

Toast.makeText(act, "短信发送完成", Toast.LENGTH_LONG).show();

sendTextMessage()方法的第一个参数表示消息发送的目的地址,addressStr是在1.1.1中获取到的目的地址;第二个参数null表示使用当前默认的SMSC;第三个参数表示要发送的内容,contentStr是在1.1.1中获取到的内容;第四个参数sentIntent是在1.1.3中定义的PendingIntent类的对象,表示只要消息发送成功,则完成sentItent对应的动作,即实现广播;第五个参数null表示消息被对方成功接收后,不进行任何动作。

2 长按动作的监听

在MainActivity类中,对“发送”按键添加长按动作的监听器。此时,设置监听器的函数setOnLongClickListener()方法的参数是在1中定义的SendSmsListener类,即使用外部类作为事件的监听器。

2.1获取控件对象

       address = (EditText)findViewById(R.id.num);

       content = (EditText)findViewById(R.id.content);

       ButtOnsendButton= (Button)findViewById(R.id.send);

通过以上代码获取了用于输入地址和内容的EditText控件的对象,以及“发送”按键的对象。

2.2 添加监听器

使用setOnLongClickListener()方法为按键添加监听器

sendButton.setOnLongClickListener(new SendSmsListener(

              this,address, content));

其中,sendButton是在2.1中获取到的按键控件对象,SendSmsLintener是在1中定义的外部类。

3 小结

今天通过发送短消息的例子学习了将外部类作为事件监听器的方法。主要通过在包中添加类的方法实现外部类的定义。在外部类的定义中,通过SmsManager类实现消息的发送,通过该类发送消息时,还要用到PendingIntent类。


推荐阅读
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)...
    与.Net大师JeffreyRichter面对面交流——TUP对话大师系列活动回顾(多图配文字)上周末很有幸参加了CSDN举行的TUP活动, ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • 我将SpringMVC升级到Spring3.2.5.我的一些剩余调用即使存在,也会返回无法识别的字段异常.这是错误.Resolvingexceptionfrom ... [详细]
  • 刚开始crousera上学习<algorithmspart1>但对JAVA实在是不熟。******************************************** ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
author-avatar
第一城的呀呀_836
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有