`
jxb_happy
  • 浏览: 12592 次
  • 性别: 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利用Intent拍照、摄像、打电话、发短信、发邮件等示例”提供了一个完整的应用实例,展示了如何灵活运用Intent来实现这些功能。下面将详细解释每个功能的实现方式。 1. **拍照** 使用Intent来调用...

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

    标题 "打电话、发短信和邮件,取得手机 IMEI 号" 涉及到的是一个 Delphi 开发的应用程序,该应用可能具有多种功能,包括拨打电话、发送短信以及获取设备的唯一标识符 IMEI(International Mobile Equipment Identity...

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

    在Android平台上,开发一款应用程序以实现打电话、发送短信和邮件,并获取手机的IMEI号,是常见的功能需求。本文将详细讲解如何使用Delphi XE6进行这些操作,并重点介绍IMEI号的获取方法。 首先,IMEI...

    8发短信打电话调系统摄像头实验报告

    实验报告“8发短信打电话调系统摄像头”是针对Android平台进行移动技术开发的实践操作,主要涉及使用Intent对象来调用系统内置的服务以及动态获取权限。在这个实验中,开发者王明达通过编写代码实现了三个主要功能:...

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

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

    Android通讯录小软件可以导入手机上的联系人、发短信、打电话、增加、修改联系人等_0.doc

    2. **发短信**:软件提供了便捷的短信发送功能,用户可以直接通过软件界面选择联系人并编写短信,提高沟通效率。 3. **打电话**:点击联系人条目即可拨打电话,无需离开应用,简化了操作流程。 4. **增加联系人**...

    android通讯录

    我们创建了一个名为 "user" 的表,其中包括了联系人的名称、电话号码、QQ 号码、电子邮件地址等信息。我们可以通过 DatabaseHelper 类来访问该表,实现联系人信息的存储和管理。 五、Add_people 类的使用 在本资源...

    Android 完整的通讯录项目源码

    通讯录项目会创建一个数据库表来保存联系人的姓名、电话号码、电子邮件等信息,并通过ContentProvider进行操作。 5. **ListView与Adapter**:显示联系人列表通常会用到ListView,它能展示大量数据并支持滚动。...

    安卓通讯录联系人打电话归属地相关-[Android项目视频教程]通讯录的开发完整代码.rar

    每个联系人项可以包含姓名、电话、电子邮件等信息。通过Adapter将数据绑定到视图上,实现数据和界面的解耦。 6. **查询与过滤**: - 实现搜索功能,允许用户输入关键词搜索联系人。这通常涉及对查询结果进行过滤,...

    Android 常用的Intent的URI及示例

    Intent.ACTION_SENDTO 是一种常用的 Intent 动作,用于打开发邮件界面。例如,下面的代码将打开发邮件界面: Uri uri = Uri.parse("mailto:admin@3gstdy.com"); Intent intent = new Intent(Intent.ACTION_SENDTO, ...

    通讯录(安卓源码,可以添加联系人和删除,查找,对联系人可以拨打,发短信)

    4. **拨打电话**:Android提供了Intent机制来处理打电话操作。应用可以创建一个隐式Intent,设置ACTION_CALL或ACTION_DIAL动作,附上电话号码作为数据,然后调用startActivity()启动这个Intent。ACTION_CALL会直接...

    安卓电话簿安卓电话簿

    6. **打电话和发送短信**:在Android中,可以使用Intent来启动拨打电话和发送短信的系统服务。例如,创建一个隐式Intent,设置ACTION_CALL或ACTION_SENDTO动作,附带电话号码或短信内容。 7. **用户界面设计**:...

    Android 19 SDK source

    6. **SMS和电话API**:提供了新的API,让第三方应用可以更好地控制短信和电话功能,例如拦截垃圾短信或创建自定义来电界面。 7. **通知栏改进**:通知栏设计更加简洁,用户可以直接从通知栏操作,如回复邮件或关闭...

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

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

    Iandroid Intent使用案例

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

    通讯录 android

    最后,考虑到用户体验,记得使用Android的权限管理系统,确保应用在运行时获取了访问联系人、打电话和发送短信所需的权限,如`READ_CONTACTS`、`WRITE_CONTACTS`、`CALL_PHONE`和`SEND_SMS`。 总结一下,创建一个...

    基于Android的通讯录管理系统开发.pdf

    通讯录是每个品牌的手机中必备的功能,同时还有打电话、发短信等一些不可或缺的功能。 在本系统中,我们基于 Android 平台,使用 SQLite 轻量级数据库和 Android Studio 开发环境,通过 Thread 线程进行开发,实现...

    基于android手机通讯录的设计与实现的毕业论文

    * 打电话:可以直接从通讯录中拨打电话。 * 发信息:可以直接从通讯录中发送短信。 * 发邮件:可以直接从通讯录中发送电子邮件。 * 备份 SD 卡:可以将通讯录备份到 SD 卡中。 3. Android 手机通讯录的设计流程 ...

    短信通话联系人

    你可以通过ContentResolver的query()方法,结合ContactsContract的常量来获取联系人信息,如姓名、电话号码、电子邮件地址等。 对于通话记录,Android同样通过ContentProvider暴露了一个接口。通话记录的...

Global site tag (gtag.js) - Google Analytics