开发者社区> 问答> 正文

Android小项目之--电话与短信服务(附源码)? 400 报错

Android小项目之--电话与短信服务(附源码)? 400 报错

在 Android上实现电话与短信服务相信己经是老生常谈了,有些人或许认为没有必要拿出来谈,网上一抓一大把。确实是,网上现在有很多调用 Android 电话与短信服务的例子,今天特地拿出来谈,只是因为有一些小技巧还是有拿出来谈的必要的。

什麽是Intent使用 Intent之前我们有必要先认识一下 Intent。

Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向 Android 表达某种请求或者意愿,Android 会根据意愿的内容选择适合的组件来请求。比如本例中使用的打电话功能,那么这个Acitivity只需要发出 Intent.ACTION_CALL 请求给Android ,剩下只要交给Android 来处理即可。 Intent的主要组成部份Intent对象抽象地描述了要执行的操作,其描述的基本内容可以分为组件名称、Action(动作)、Data(数据)、Category(类别)、Extra(附加信息)和Flag(标志位)6部份,具体的使用功能可查看相关文档,这里不多介绍。

解析 IntentIntent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制, Intent 不仅需要发送端,还需要接收端。那么Intent如何解析 Intent 的请求内容,并选择合适的组件响应 Intent 请求呢?本篇就会告诉大家,请继续往下看。

用Intent激活程序---电话与短信本篇中使用的 Intent 打电话程序中,Intent 的行为是 ACTION_DIAL,同时在 Intent 中传递被呼叫人的电话号码。

拨打电话的关键有两个方面,首先,要在 AndroidManifest 中添加 uses-permission(即为程序分配使用权限),并声明android:name="android.permission.CALL_PHONE" 权限。由於打电话是属於手机的底层服务,与用户隐私及通话费用等话题息息相关,困此,程序必须取得权限。其次,通过自定义 Intent 对象,带入“ACTION_CALL” 这个关键(Action),以及通过Uri.parse()的方法将用户输入电话号码(Data)带入,最后以 startActivity()方法,即可完成,代码如下:

import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.*   ; publicclass phoneAndsmsAcitivity   extends Activity { private Button myButton; private EditText myEditText; /** Called when the activity is first created. */ @Override publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton=   (Button)findViewById(R.id.button); myEditText=   (EditText)findViewById(R.id.mobile); myButton.setOnClickListener(new OnClickListener() { @Override publicvoid onClick(View v) { // TODO Auto-generated method stubif(myEditText.getText().length()>0   ) { Intent myIntent=   new Intent(Intent.ACTION_CALL,Uri.parse ("tel:"+   myEditText.getText().toString())); phoneAndsmsAcitivity.this.startActivity(myIntent); } } }); }} 

运行效果:

短信也是任何一款手机不可或缺的应用之一,几乎是手机使用频率最高的应用之一(不发短信的飘过~~~~~~)。Android自带有一个发短信的类 SmsManager,利用这个类,我们可以完成手机的短信发送与接收工作,其中 sentTextMessage() 方法需要传入五个值,依次是收件人地址(String)、发送人地址(String)、正文(String)、发送服务(PendingIntent)、与送达服务(PendingIntent),其中收件人与正文是不可为NULL的参数。跟打电话一样,涉及到与金钱有关的必须在配置文件分配权限,权限代码如下:,smsManager的公开方法如下:

简单的发送短信代码:

package com.terry; import java.util.List; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.telephony.gsm.SmsManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; @SupssWarnings("decation"   ) publicclass smsAcitivity   extends Activity { private Button myButton; private EditText myEditText; private EditText EditText2; @Override protectedvoid onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stubsuper.onCreate(savedInstanceState); setContentView(R.layout.sms); myButton=   (Button)findViewById(R.id.button); myEditText=   (EditText)findViewById(R.id.mobile); EditText2=   (EditText)findViewById(R.id.content); myButton.setOnClickListener(new OnClickListener() { @Override publicvoid onClick(View v) { // TODO Auto-generated method stub String mobile=   myEditText.getText().toString(); String content=   EditText2.getText().toString(); SmsManager sms=   SmsManager.getDefault(); PendingIntent sentintent =PendingIntent.getBroadcast(smsAcitivity.   this, 0,   new Intent(), 0   ); try { if(content.length()>70   ) { List msgs=   sms.divideMessage(content); for(String msg:msgs) { sms.sendTextMessage(mobile, null, msg, sentintent,   null); } } else { sms.sendTextMessage(mobile, null, content, sentintent,   null); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } Toast.makeText(smsAcitivity.this, "短信發送成功", 1000   ).show(); } }); } } 

关於一个测试的小技巧:发送短信的时候我们需要两台机子可以测试,这时候我们要同时启动两个模拟器己达到发送与接收的效果,这时候你可以如下操作:开始 --cmd--emulator -data foo 依此在 dos 命令中输入,即可重新打开一个模拟器,下面是收送测试效果图:

源码下载

原文链接:  http://www.cnblogs.com/vus520/archive/2011/12/14/2561955.html

展开
收起
优选2 2020-06-05 16:49:01 792 0
1 条回答
写回答
取消 提交回答
  • http://www.game2palm.com/短信验证码请选择杭州掌游科技

    2020-06-05 16:49:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载