Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 950|回复: 0

[实例教程]Android小项目之--电话与短信服务(附源码)

[复制链接]

该用户从未签到

发表于 2011-10-22 13:42:47 | 显示全部楼层 |阅读模式
  在 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.*;

public class phoneAndsmsAcitivity extends Activity {

    private Button myButton;

    private EditText myEditText;

    /** Called when the activity is first created. */

    @Override

    public void 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

            public void onClick(View v) {

                // TODO Auto-generated method stub

                if(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的参数。跟打电话一样,涉及到与金钱有关的必须在配置文件分配权限,权限代码如下:<uses-permission android:name="android.permission.SEND_SMS"/>,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;



@SuppressWarnings("deprecation")

public class smsAcitivity extends Activity {

    private Button myButton;

    private EditText myEditText;

    private EditText EditText2;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.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

            public void 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<String> 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 命令中输入,即可重新打开一个模拟器,下面是收送测试效果图:


  疑问:

  不知道有没有细心的朋友发现。好像Google API 中不建议使用 smsManager 这个类来发送短信,如果是不建议那是否有另外的替代方案?如果知道的园友不妨告知一声。。非常感激。

  源码下载:  phoneAndsms.rar (46.01 KB, 下载次数: 59)
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:42:57 | 显示全部楼层
都莫有人回复?!!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:43:08 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:43:17 | 显示全部楼层
感谢分享    一定好好学习!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:43:24 | 显示全部楼层
hellow world
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:43:31 | 显示全部楼层
谢谢分享。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:43:45 | 显示全部楼层
下载下来,学习之!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:43:54 | 显示全部楼层
dddddddddddddddd
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:44:03 | 显示全部楼层
好东西啊 很受用
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:44:09 | 显示全部楼层

Re:[实例教程]Android小项\0

谢谢楼主的分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-19 00:30 , Processed in 0.421421 second(s), 38 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表