android 中打电话 和 发送短信
来源:互联网 发布:伊东祐亨 知乎 编辑:程序博客网 时间:2024/04/29 00:50
首先 要加入权限
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission><uses-permission android:name="android.permission.READ_SMS"></uses-permission><uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
发送短信
方法一
private void send1(String phone, String message){ PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, testSms.class), 0); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phone, null, message, pi, null); }
方法二
获取发送后的状态
private void send2(String number, String message){ String SENT = "sms_sent"; String DELIVERED = "sms_delivered"; PendingIntent sentPI = PendingIntent.getActivity(this, 0, new Intent(SENT), 0); PendingIntent deliveredPI = PendingIntent.getActivity(this, 0, new Intent(DELIVERED), 0); registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { switch(getResultCode()) { case Activity.RESULT_OK: Log.i("====>", "Activity.RESULT_OK"); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Log.i("====>", "RESULT_ERROR_GENERIC_FAILURE"); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Log.i("====>", "RESULT_ERROR_NO_SERVICE"); break; case SmsManager.RESULT_ERROR_NULL_PDU: Log.i("====>", "RESULT_ERROR_NULL_PDU"); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Log.i("====>", "RESULT_ERROR_RADIO_OFF"); break; } } }, new IntentFilter(SENT)); registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent){ switch(getResultCode()) { case Activity.RESULT_OK: Log.i("====>", "RESULT_OK"); break; case Activity.RESULT_CANCELED: Log.i("=====>", "RESULT_CANCELED"); break; } } }, new IntentFilter(DELIVERED)); SmsManager smsm = SmsManager.getDefault(); smsm.sendTextMessage(number, null, message, sentPI, deliveredPI);}
方法三
发送非文本消息
private void send2(String number, String message){ SmsManager smsm = SmsManager.getDefault(); short port = 1000; PendingIntent pi = PendingIntent.getBroadcast(test.this, 0, new Intent(), 0); smsm.sendDataMessage(number, null, port, message.getBytes(), pi, null);}
方法四
调用系统的短信界面,这个方法需要用户自己输入接收方的电话号码private void send(String message){ Intent sendIntent = new Intent(Intent.ACTION_VIEW); sendIntent.putExtra("sms_body", message); sendIntent.setType("vnd.android-dir/mms-sms");}这个方法自动设置接收方的号码private void send1(String number, String message){ Uri uri = Uri.parse("smsto:" + number); Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri); sendIntent.putExtra("sms_body", message); startActivity(sendIntent);}
方法5
短信的 接收
短信的接受,需要实现BroadcastReceiver类,监听系统消息首先在Mainfest.xml中加入申明,SmsReceiver为实现类<receiver android:name=".SmsReceiver"><intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /></intent-filter></receiver>如果是方法3,使用sendDataMessage时需要加入<receiver android:name=".SmsReceiver"><intent-filter> <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> <data android:scheme="sms" /> <data android:host="localhost" /> <data android:port="1000" /></intent-filter></receiver>将其中的dat数据注释掉,模拟器上也可以接收到短信; port跟sendDataMessage中的端口值不一致时,也没有问题,太神奇了public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; String phone; String message; if(bundle != null){ Object[] pdus = (Object[])bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for(int i = 0; i < msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); phone = msgs[i].getOriginatingAddress(); message = msgs[i].getMessageBody(); } } }}如果是sendDataMessage发送:public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; String phone; String message; if(bundle != null){ Object[] pdus = (Object[])bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for(int i = 0; i < msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); phone = msgs[i].getOriginatingAddress(); byte data[] = SmsMessage.createFromPdu((byte[])pdus[i]).getUserData(); message = new String(data); } } }}
方法 六 调用 打电话 发短信 邮件 汇总
1 调用发送短信功能:Uri smsToUri = Uri.parse("smsto:"); Intent sendIntent = new Intent(Intent.ACTION_VIEW, smsToUri); sendIntent.putExtra("address", "123456"); //电话号码,这行去掉的话,默认就没有电话sendIntent.putExtra("sms_body","短信内容"); sendIntent.setType("vnd.android-dir/mms-sms"); startActivity(sendIntent);2 调用发送邮件功能: Intent email = new Intent(android.content.Intent.ACTION_SEND);email.setType("plain/text");String[] emailReciver = new String[]{"xxxx@qq.com","yyy@xx.com"};String emailSubject = "从问道分享来的文章";StringemailBody = internetpath;//设置邮件默认地址email.putExtra(android.content.Intent.EXTRA_EMAIL, emailReciver);//设置邮件默认标题email.putExtra(android.content.Intent.EXTRA_SUBJECT, emailSubject);//设置要默认发送的内容email.putExtra(android.content.Intent.EXTRA_TEXT, emailBody);//调用系统的邮件系统startActivity(Intent.createChooser(email, "请选择邮件发送软件"));3.打电话 Intent intent = new Intent(); intent.setAction("android.intent.action.DIAL"); intent.setData(Uri.parse("tel:400 616 0066")); startActivity(intent);
0 0
- android 中打电话 和 发送短信
- android发送短信和打电话
- [Android实例] android 发送短信和打电话
- android发送短信和打电话的方法
- android模拟打电话和发送短信
- Android 发送短信 和 打电话 具体事项
- 安卓端打电话和发送短信
- android 向 模拟器 发送短信 打电话
- 调用Android系统API发送短信,打电话
- 发送短信和打电话的方法
- 发送短信和打电话的方法
- 发送短信和打电话的方法
- Activity和Intent,打电话,发送短信
- 发送短信和打电话的方法
- 利用Intent 发送短信和打电话
- 发送短信/邮件/打电话:
- 打电话,发送短信
- 自定义发送短信,打电话
- 亚波利纳里斯的魔法糕点 二分枚举
- KMP算法
- Android 禁止屏幕休眠和锁屏的方法
- unity实现描边效果
- 计算存储 并清除
- android 中打电话 和 发送短信
- mac设置锁屏
- 一起学opencv (六) 形态学-腐蚀和膨胀
- ElasticSearch学习笔记-JavaAPI操作记录
- Android三种播放视频的方式
- Qt问题记录
- IDEA整合jrebel实现热部署
- 函数式leetcode-4
- Qt多线程基础(三)子线程与主线程通信