android 短信和电话拦截
来源:互联网 发布:淘宝买家怎么删除评价 编辑:程序博客网 时间:2024/04/28 05:34
短信拦截实现
手机状态发生改变时,系统会发生各种广播。如电池信息、收到短信、接听电话等灯。如果要拦截手机的短信,只需要接受系统短信广播即可。短信广播属于有序广播,可以传递到下一个广接收者处理。如果需要屏蔽系统接收短信,只需要中断广播的传输。
短信广播 android.provider.Telephony.SMS_RECEIVED
1. 定义广播接收器
public class SmsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// 如果是接收到短信
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
{
// 取消广播(这行代码将会让系统收不到短信)
abortBroadcast();
StringBuilder sb = new StringBuilder();
// 接收由SMS传过来的数据
Bundle bundle = intent.getExtras();
// 判断是否有数据
if (bundle != null)
{
// 通过pdus可以获得接收到的所有短信消息
Object[] pdus = (Object[]) bundle.get("pdus");
// 构建短信对象array,并依据收到的对象长度来创建array的大小
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
{
messages[i] = SmsMessage
.createFromPdu((byte[]) pdus[i]);
}
// 将送来的短信合并自定义信息于StringBuilder当中
for (SmsMessage message : messages)
{
sb.append("短信来源:");
// 获得接收短信的电话号码
sb.append(message.getDisplayOriginatingAddress());
sb.append("\n------短信内容------\n");
// 获得短信的内容
sb.append(message.getDisplayMessageBody());
}
}
Toast.makeText(context, sb.toString()
, Toast.LENGTH_LONG).show();
}
}
}
2.配置广播
<receiver
android:name=".SmsReceiver" >
<!--android:priority 广播接收优先级别 -->
<intent-filter android:priority="800" >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver >
添加接收短信权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
电话拦截
1.获取手机管理对象
final TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
2. extends PhoneStateListener 监听手机状态
class MyPhoneStateListener extends PhoneStateListener
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
switch (state)
{
case TelephonyManager.CALL_STATE_IDLE:
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Log.i("CALL_STATE_IDLE", "无活动"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(getApplicationContext(), "来电已经接听", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_OFFHOOK", "摘机。"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
//当手机接收来电时,设置静音
am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//正当模式 mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Toast.makeText(getApplicationContext(), "来电已经拦截", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_RINGING", "振铃"+" "+incomingNumber);
break;
}
}
}
3. 注册监听器
telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
//添加读取手机状态权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
测试类:
public class TestSmsActivity extends Activity
{
Button but = null;
AudioManager am = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
but = (Button) findViewById(R.id.call);
but.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
Toast.makeText(getApplicationContext(), "拦截已开启", Toast.LENGTH_SHORT).show();
}
});
}
class MyPhoneStateListener extends PhoneStateListener
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
switch (state)
{
case TelephonyManager.CALL_STATE_IDLE:
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Log.i("CALL_STATE_IDLE", "无活动"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(getApplicationContext(), "来电已经接听", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_OFFHOOK", "摘机。"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
//设置静音
am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//正当模式 mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Toast.makeText(getApplicationContext(), "来电已经拦截", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_RINGING", "振铃"+" "+incomingNumber);
break;
}
}
}
}
手机状态发生改变时,系统会发生各种广播。如电池信息、收到短信、接听电话等灯。如果要拦截手机的短信,只需要接受系统短信广播即可。短信广播属于有序广播,可以传递到下一个广接收者处理。如果需要屏蔽系统接收短信,只需要中断广播的传输。
短信广播 android.provider.Telephony.SMS_RECEIVED
1. 定义广播接收器
public class SmsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// 如果是接收到短信
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
{
// 取消广播(这行代码将会让系统收不到短信)
abortBroadcast();
StringBuilder sb = new StringBuilder();
// 接收由SMS传过来的数据
Bundle bundle = intent.getExtras();
// 判断是否有数据
if (bundle != null)
{
// 通过pdus可以获得接收到的所有短信消息
Object[] pdus = (Object[]) bundle.get("pdus");
// 构建短信对象array,并依据收到的对象长度来创建array的大小
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
{
messages[i] = SmsMessage
.createFromPdu((byte[]) pdus[i]);
}
// 将送来的短信合并自定义信息于StringBuilder当中
for (SmsMessage message : messages)
{
sb.append("短信来源:");
// 获得接收短信的电话号码
sb.append(message.getDisplayOriginatingAddress());
sb.append("\n------短信内容------\n");
// 获得短信的内容
sb.append(message.getDisplayMessageBody());
}
}
Toast.makeText(context, sb.toString()
, Toast.LENGTH_LONG).show();
}
}
}
2.配置广播
<receiver
android:name=".SmsReceiver" >
<!--android:priority 广播接收优先级别 -->
<intent-filter android:priority="800" >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver >
添加接收短信权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
电话拦截
1.获取手机管理对象
final TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
2. extends PhoneStateListener 监听手机状态
class MyPhoneStateListener extends PhoneStateListener
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
switch (state)
{
case TelephonyManager.CALL_STATE_IDLE:
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Log.i("CALL_STATE_IDLE", "无活动"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(getApplicationContext(), "来电已经接听", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_OFFHOOK", "摘机。"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
//当手机接收来电时,设置静音
am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//正当模式 mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Toast.makeText(getApplicationContext(), "来电已经拦截", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_RINGING", "振铃"+" "+incomingNumber);
break;
}
}
}
3. 注册监听器
telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
//添加读取手机状态权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
测试类:
public class TestSmsActivity extends Activity
{
Button but = null;
AudioManager am = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
but = (Button) findViewById(R.id.call);
but.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
Toast.makeText(getApplicationContext(), "拦截已开启", Toast.LENGTH_SHORT).show();
}
});
}
class MyPhoneStateListener extends PhoneStateListener
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
switch (state)
{
case TelephonyManager.CALL_STATE_IDLE:
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Log.i("CALL_STATE_IDLE", "无活动"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(getApplicationContext(), "来电已经接听", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_OFFHOOK", "摘机。"+" "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
//设置静音
am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//正当模式 mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Toast.makeText(getApplicationContext(), "来电已经拦截", Toast.LENGTH_SHORT).show();
Log.i("CALL_STATE_RINGING", "振铃"+" "+incomingNumber);
break;
}
}
}
}
- android 短信和电话拦截
- android 短信和电话拦截
- Android 电话和短信拦截
- Android电话和短信拦截器
- Android电话和短信拦截器
- Android电话和短信拦截器
- 黑名单电话和短信拦截
- android 关于特定短信电话拦截
- android电话拦截及短信过滤
- android电话、短信黑白名单拦截、电话录音
- Android -- 怎么发出和接收广播, Broadcast, 电话拨号拦截,短信拦截
- Android-实现对指定电话的短信拦截和来电拦截
- 拦截系统短信、电话
- 电话短信拦截
- 拦截短信与拦截电话
- android 电话和短信api
- Android 调用电话和短信
- Android短信和拨打电话
- 面向对象设计原则
- create database link
- android环境变量设置和自定义命令
- 利用datalist实现文章的分类查看
- google map的坐标系统
- android 短信和电话拦截
- 日志
- oracle EXP-00011
- android 图片缩放
- 每一位投资者都应该知道如何确定
- 一个悲催的程序员
- 所有这些策略象一个聪明的投资者
- 投资资金和财务的未来产量的增长
- Linux 中文件和文件夹获取 Mysql 权限(selinux)