打电话与接收、发送短信

直接拨打电话:需要权限(敏感权限) "android.permission.CALL_PHONE" 

@Override
public void onClick(View v) {//单击时执行  
  //1.获取输入框的号码
  EditText etNumber = (EditText)findViewById(R.id.inputname);//输入框对象
  String number = etNumber.getText().toString();//获取号码
  //2.根据号码拨打电话 用系统拨打
  Intent intent =new Intent();//创建一个意图
  intent.setAction(Intent.ACTION_CALL);//指定其动作为拨打电话
  intent.setData(Uri.parse("tel:"+number));//指定将要拨出的号码
  startActivity(intent);//执行这个动作
}

 

//跳转到拨号界面  不需要权限
        Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:110"));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);

 

 

 

接收短信且拦截系统接收短信:

当手机接收到一条短信的时候,系统会发出一条值为 android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里
携带着与短信相关的所有数据。每个应用程序都可以在广播接收器里对它进行监听,收到广
播时再从中解析出短信的内容即可。

package com.example.smstest;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

/**
 * 接收短信的权限 需要在AndroidManifest.xml中加入:
 *<uses-permission android:name="android.permission.RECEIVE_SMS"/>
 */
public class MainActivity extends Activity {

    private TextView sender;
    private TextView content;
    private MessageReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sender = (TextView) findViewById(R.id.sender);//发送者
        content = (TextView) findViewById(R.id.content);//接收的短信内容
        //注册广播
        IntentFilter filter=new IntentFilter();
        filter.setPriority(100);//设置优先级,让它能够先于系统短信程序接收到短信广播
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        receiver = new MessageReceiver();
        registerReceiver(receiver, filter);
        
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);//活动销毁时取消注册广播
    }
    //创建一个广播接收器来接收系统发出的短信广播
    class MessageReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle bundle = intent.getExtras();//获取意图附加的数据
            Object[] pdus = (Object[]) bundle.get("pdus");//提取短信消息
            SmsMessage[] message=new SmsMessage[pdus.length];
            String fullMessage="";
            for(int i=0;i<message.length;i++){
                message[i]=SmsMessage.createFromPdu((byte[]) pdus[i]);
                fullMessage=fullMessage+message[i].getMessageBody();//获取短信内容
            }
            String address=message[0].getOriginatingAddress();//获取发送方号码
            sender.setText("发送者号码:"+address);
            content.setText("短信内容为:"+fullMessage);
            abortBroadcast();//终止广播,使系统收不到广播(避免我们的应用和系统自带的短信应用都收到短信)
        }
    }

}

发送短信且监听发送的结果

 

package com.example.smstest;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
  发送短信的权限  需要在AndroidManifest.xml中加入:
<uses-permission android:name="android.permission. SEND_SMS" />
 */
public class SendMSM_Demo extends Activity {

    private EditText to;
    private EditText msg_input;
    private Button send;
    private SendStatusReceiver sendState;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //发送短信的控件
        to = (EditText) findViewById(R.id.to);//需要发送的号码
        msg_input = (EditText) findViewById(R.id.msg_input);//输入的短信内容
        send = (Button) findViewById(R.id.send);//发送短信按钮
        //注册发送状态的广播
        IntentFilter filter=new IntentFilter();
        filter.addAction("send");//监听这个广播
        sendState = new SendStatusReceiver();
        registerReceiver(sendState, filter);
        
        
        //发送短信
        send.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String name=to.getText().toString();//号码
                String content=msg_input.getText().toString();//短信内容
                SmsManager manager = SmsManager.getDefault();
                Intent sentIntent=new Intent("send");//自定义意图
                PendingIntent pi=PendingIntent.getBroadcast(SendMSM_Demo.this, 0, sentIntent, 0);//有待意图发送广播(发送自定义的广播)
                manager.sendTextMessage(name, null, content, pi, null);//发送短信
            }
        });
    }
    //接收短信发送状态的广播(接收自定义的广播)
    class  SendStatusReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            if(getResultCode()==RESULT_OK){//根据结果编码进行判断
                Toast.makeText(context, "短信发送成功", 0).show();
            }else{
                Toast.makeText(context, "短信发送失败", 0).show();
            }
        }
    }
    @Override
    protected void onDestroy() {//该活动摧毁的时候执行
        super.onDestroy();
        unregisterReceiver(sendState);//取消发送状态广播的注册
    }
}

 

posted @ 2016-04-21 19:30  ts-android  阅读(307)  评论(0编辑  收藏  举报