打电话与接收、发送短信
直接拨打电话:需要权限(敏感权限) "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);//取消发送状态广播的注册 } }