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
原创粉丝点击