`
jxb_happy
  • 浏览: 11930 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

android 发短信、打电话、发邮件

阅读更多

短信

1.发送短信

需要权限 android.permission.SEND_SMS

使用android.telephony.SmsManager类

普遍使用的方式

 

private void sendSmsMessage(String address,String message)throws Exception
    {
        SmsManager smsMgr = SmsManager.getDefault();
        Intent sent = new Intent();
        sent.setAction("com.send");
        PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, sent, 0);
        Intent delivery = new Intent();
        delivery.setAction("com.delivery");
        PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, delivery , 0);
        smsMgr.sendTextMessage(address, null, message, sentIntent, deliveryIntent);
    }

 BroadcastReceiver send = new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			
			if("com.send".equals(intent.getAction()))
				Toast.makeText(TelephonyDemo.this, "SMS send  success", 
	                	Toast.LENGTH_LONG).show();
		}
	};
	 BroadcastReceiver delivery = new BroadcastReceiver() {
			
			@Override
			public void onReceive(Context context, Intent intent) {
				if("com.delivery".equals(intent.getAction()))
					Toast.makeText(TelephonyDemo.this, "SMS delivery success", 
	                	Toast.LENGTH_LONG).show();
			}
		};

 

 另两种方式

sendDataMessage()接受一个附加参数以指定一个端口号,还会接受一个字节数组(不是一个String 消息)。

sendMultipartTextMessage()支持在整条消息大于SMS规范所允许的大小时发送文本消息。

SmsManager类提供了divideMessage()方法来帮助将较长的消息拆分为多个部分。

2.监视传入的SMS消息

需要权限:android.permission.RECEIVE_SMS

当设备收到SMS消息时,android会发出广播。该广播的action是android.provider.Telephony.SMS_RECEIVED

该action在文档上找不到,在源码的android.provider包下能找到Telephony类,其中有这么个action,同时有参数说明

 

  /**
             * Broadcast Action: A new text based SMS message has been received
             * by the device. The intent will have the following extra
             * values:</p>
             *
             * <ul>
             *   <li><em>pdus</em> - An Object[] od byte[]s containing the PDUs
             *   that make up the message.</li>
             * </ul>
             *
             * <p>The extra values can be extracted using
             * {@link #getMessagesFromIntent(Intent)}.</p>
             *
             * <p>If a BroadcastReceiver encounters an error while processing
             * this intent it should set the result code appropriately.</p>
             */
            @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
            public static final String SMS_RECEIVED_ACTION =
                    "android.provider.Telephony.SMS_RECEIVED";

 

 具体实现

 

<receiver android:name="MySMSMonitor">
			<intent-filter>
				<action android:name="android.provider.Telephony.SMS_RECEIVED" />
			</intent-filter>
		</receiver>

public class MySMSMonitor extends BroadcastReceiver {

	private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

	@Override
    public void onReceive(Context context, Intent intent)
    {
		if(intent!=null && intent.getAction()!=null && 
	        ACTION.compareToIgnoreCase(intent.getAction())==0)
	    {
	        Object[]pduArray = (Object[]) intent.getExtras().get("pdus");
	        SmsMessage[] messages = new SmsMessage[pduArray.length];
	        for (int i = 0; i<pduArray.length; i++) {
	            messages[i] = SmsMessage.createFromPdu((byte[])pduArray [i]);
	            Log.d("MySMSMonitor", "From: " + messages[i].getOriginatingAddress());
	            Log.d("MySMSMonitor", "Msg: " + messages[i].getMessageBody());
	        }
	        Log.d("MySMSMonitor","SMS Message Received.");
	    }
	}
}
 

 

访问SMS文件夹

需要权限 android.permission.READ_SMS

要读取SMS消息,必须对SMS收件箱进行查询。如下所示

 

public class SMSInboxDemo extends ListActivity {

    private ListAdapter adapter;
    private static final Uri SMS_INBOX = Uri.parse("content://sms/inbox");

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        Cursor c = getContentResolver()
                .query(SMS_INBOX, null, null, null, null);
        startManagingCursor(c);
        String[] columns = new String[] { "body" };
        int[] names = new int[] { R.id.row };
        adapter = new SimpleCursorAdapter(this, R.layout.sms_inbox, c, columns,
                names);

        setListAdapter(adapter);
    }
}

 

 以下是完整的SMS文件夹列表和每个文件夹的URI

所有文件夹  content://sms/all

收件箱 content://sms/inbox

已发送 content://sms/sent

草稿 content://sms/draft

发件箱 content://sms/outbox

发送失败 content://sms/failed

排队消息 content://sms/queued

未送达 content://sms/undelivered

对话 content://sms/conversations

 

 

发送电子邮件

android没有提供API来发送电子邮件,必须使用已注册的电子邮件应用程序。可以使用ACTION_SEND来启动电子邮件应用程序

 

 Intent emailIntent=new Intent(Intent.ACTION_SEND);

        String subject = "Hi!";
        String body = "hello from android....";

        String[] extra = new String[]{"aaa@bbb.com"};
      
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
        emailIntent.putExtra(Intent.EXTRA_TEXT, body);
		emailIntent.putExtra(Intent.EXTRA_EMAIL, extra);
        emailIntent.setType("message/rfc822");

        startActivity(emailIntent);

 

 可以向电子邮件Intent添加的其他"extra"消息包括EXTRA_CC(抄送)、EXTRA_BCC(密送)。如果希望在邮件中发送电子邮件附件。可以使用以下代码。

 

emailIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(new File(myFileName)));
 

 

打电话

播出电话的最简单方法是使用以下代码

 

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678911"));
startActivity(intent);

 

 这段代码需要android.permission.CALL_PHONE权限。如果没有此权限,可以将Intent的操作更改为Intent.ACTION_VIEW.这会导致Dialer应用程序显示要拨打的目标号码,用户需要按下Send按钮才能开始呼叫。

 

 

监听电话状态

监听电话状态最简单的办法是在"android.intent.action.PHONE_STATE"上实现一个广播接收程序。可采用与上面监听传入的SMS消息相同的方式。

该action可以在文档中找到

http://developer.android.com/reference/android/telephony/TelephonyManager.html#ACTION_PHONE_STATE_CHANGED

另一种方式是使用TelephonyManager

 

 private TelephonyManager teleMgr = null;
 private MyPhoneStateListener myListener = null;


@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        teleMgr = 
                (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        myListener = new MyPhoneStateListener();
    }

 @Override
    public void onResume() {
    	super.onResume();
    	Log.d("PhoneCallDemo", "In onResume");
        teleMgr.listen(myListener, PhoneStateListener.LISTEN_CALL_STATE);
    }
    
    @Override
    public void onPause() {
    	super.onPause();
    	Log.d("PhoneCallDemo", "In onPause");
        teleMgr.listen(myListener, PhoneStateListener.LISTEN_NONE);
    }

public class MyPhoneStateListener extends PhoneStateListener
    {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);

            switch(state)
            {
                case TelephonyManager.CALL_STATE_IDLE:
                    logText = "call state idle...incoming number is["+
                                incomingNumber+"]\n" + logText;
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                	logText = "call state ringing...incoming number is["+
                                incomingNumber+"]\n" + logText;
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                	logText = "call state Offhook...incoming number is["+
                                incomingNumber+"]\n" + logText;
                    break;
                default:
                	logText = "call state ["+state+"]incoming number is["+
                                incomingNumber+"]\n" + logText;
                    break;
            }
            print(logText);
        }
    }
 

 

2
0
分享到:
评论

相关推荐

    Android利用Intent拍照、摄像、打电话、发短信、发邮件等示例

    该资源是一个完整的Android应用,演示了如何在Android中利用Intent进行拍照、摄像、打电话、发短信、发邮件等

    Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码

    Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码 功能 创建5个按钮,隐式启动、发短信、拨号按钮、电话按钮、打开网页按钮。通过使用Intent来完成各自按钮下的功能 代码目录如下 详细代码...

    打电话、发短信和邮件,取得手机 IMEI 号

    1.保证无毒 2.简单,方便,实用 3.实例可以自行改用 4.如有非法,本人无法律责任,由改动代码人负责! 5.需要更多本人作品,查找标签“朱建强” 6.请下载,杀毒后再使用!

    Android开发实验---通讯录.docx

    3、通功能 用户在通录选择联系人进入联系详细信息界面,这时点击menu键打开通信功能框,选择打电话、发信息的功能进行操作。 4、菜单能 通过对menu按的点击,显示底部菜框,包含有增加查找、除、菜单、返回功能,...

    android Intent实例

    3,调拨打电话界面 Uri telUri = Uri.parse("tel:100861"); returnIt = new Intent(Intent.ACTION_DIAL, telUri); 4,直接拨打电话 Uri callUri = Uri.parse("tel:100861"); returnIt = new Intent(Intent.ACTION_...

    Android应用源码仿QQ列表通讯录项目

    QQ的好友列表大家都很熟悉吧?...点击联系人头像右边的箭头按钮可以出现发邮件、短信和打电话的选项。联系人信息的存储使用的SQLite、项目不大注释合理。是套比较优秀的项目源码。 涉及模块&技术 SQLite 图片处理 ...

    Iandroid Intent使用案例

    android Intent使用案例 含:播放多媒体、打电话、发短信、发送email、发邮件、google服务、组件component、action值自定义、显示地图/路径规划、选择应用、打开应用列表、搜索应用等意图实例。

    《Google Android SDK开发范例大全(第3版)》.pdf

    6.23 画一颗心,打电话给honey 392 6.24 开启内置闹钟与已安装的应用程序设置 394 6.25 在sdk开发环境中访问jni接口 397 第7章 娱乐多媒体 401 7.1 访问drawable资源的宽和高 402 7.2 绘制几何图形...

    Google Android SDK开发范例大全(第3版) 1/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(第3版) 4/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(第3版) 3/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(第3版) 5/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Google Android SDK开发范例大全(第3版)part2

     6.23 画一颗心,打电话给HONEY  6.24 开启内置闹钟与已安装的应用程序设置  6.25 在SDK开发环境中访问JNI接口  第7章 娱乐多媒体  7.1 访问Drawable资源的宽和高  7.2 绘制几何图形  7.3 手机屏幕保护...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Google Android SDK开发范例大全的目录

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Android实习报告.doc

    2. 向选中的联系人打电话、发短信。结构图如图1所示 图1 功能结构图 3.2页面设计 通讯录界面如图2所示。添加联系人和编辑联系人界面,如图3所示。 图2 图3 单击主页面中任意一个名字,即可查看对应的通讯录的详细...

Global site tag (gtag.js) - Google Analytics