Android中通过来电转移实现“电话已关机”,“此号码已停机”等
来源:互联网 发布:angular route.min.js 编辑:程序博客网 时间:2024/04/30 07:56
挂断一个电话在API-10和之前版本中直接调用TelephonyManager对象的endCall方法即可, 但是之后的版本中这个API不再被公开(升级后的Android系统中还存在, 但是在Android SDK中不再提供给开发者* ). 所以这里用了反射机制
- //13800000000即是要转移到的号码
- Intent localIntent = new Intent();
- localIntent.setAction("android.intent.action.CALL");
- Uri uri = Uri.parse("tel:" + "**67*13800000000%23");
- localIntent.setData(uri);
- startActivity(localIntent);
- Intent localIntent = new Intent();
- localIntent.setAction("android.intent.action.CALL");
- Uri uri = Uri.parse("tel:" + "%23%2367%23");
- localIntent.setData(uri);
- startActivity(localIntent);
- import java.lang.reflect.Method;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.media.AudioManager;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.os.RemoteException;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import com.android.internal.telephony.ITelephony;
- /**
- * 演示如何设置呼叫转移,拦截电话(拦截后提示为空号)的例子
- * @author Tony from ToEach.
- * @email wan1976@21cn.com
- */
- public class MainActivity extends Activity {
- private static final String TAG = MainActivity.class.getSimpleName();
- private final static int OP_REGISTER = 100;
- private final static int OP_CANCEL = 200;
- private final static String BLOCKED_NUMBER = "1892501xxxx";//要拦截的号码
- //占线时转移,这里13800000000是空号,所以会提示所拨的号码为空号
- private final String ENABLE_SERVICE = "tel:**67*13800000000%23";
- //占线时转移
- private final String DISABLE_SERVICE = "tel:%23%2367%23";
- private IncomingCallReceiver mReceiver;
- private ITelephony iTelephony;
- private AudioManager mAudioManager;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- findViewById(R.id.btnEnable).setOnClickListener(new OnClickListener(){
- public void onClick(View v) {
- //设置呼叫转移
- Message message = mHandler.obtainMessage();
- message.what = OP_REGISTER;
- mHandler.dispatchMessage(message);
- }
- });
- findViewById(R.id.btnDisable).setOnClickListener(new OnClickListener(){
- public void onClick(View v) {
- //取消呼叫转移
- Message message = mHandler.obtainMessage();
- message.what = OP_CANCEL;
- mHandler.dispatchMessage(message);
- }
- });
- mReceiver = new IncomingCallReceiver();
- IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE");
- registerReceiver(mReceiver, filter);// 注册BroadcastReceiver
- mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- //利用反射获取隐藏的endcall方法
- TelephonyManager telephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- try {
- Method getITelephonyMethod = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[]) null);
- getITelephonyMethod.setAccessible(true);
- iTelephony = (ITelephony) getITelephonyMethod.invoke(telephonyMgr, (Object[]) null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private Handler mHandler = new Handler() {
- public void handleMessage(Message response) {
- int what = response.what;
- switch(what) {
- case OP_REGISTER:{
- Intent i = new Intent(Intent.ACTION_CALL);
- i.setData(Uri.parse(ENABLE_SERVICE));
- startActivity(i);
- break;
- }
- case OP_CANCEL:{
- Intent i = new Intent(Intent.ACTION_CALL);
- i.setData(Uri.parse(DISABLE_SERVICE));
- startActivity(i);
- break;
- }
- }
- }
- };
- private class IncomingCallReceiver extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
- Log.i(TAG, "State: "+ state);
- String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
- Log.d(TAG, "Incomng Number: " + number);
- if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){//电话正在响铃
- if(number.equals(BLOCKED_NUMBER)){//拦截指定的电话号码
- //先静音处理
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
- Log.d(TAG, "Turn ringtone silent");
- try {
- //挂断电话
- iTelephony.endCall();
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- //再恢复正常铃声
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
- }
- }
- }
- }
- }
0 0
- Android中通过来电转移实现“电话已关机”,“此号码已停机”等
- Android中通过来电转移实现“电话已关机”,“此号码已停机”等
- Android中通过来电转移实现“电话已关机”,“此号码已停机”等
- Android中通过来电转移实现“电话已关机”,“此号码已停机”等
- 实现防火墙的“电话已关机”,“此号码已停机”,“号码不存在”等提示音的方法
- 文章标题android来电通过广播实现电话自动挂断
- 您好,您拨打的电话已关机
- android基础笔记——android 电话类型 来电、已拨、未接
- Android通过来电号码识别姓名。
- Android 识别来电号码
- Android开发之来电电话挂断实现
- 博客已转移
- 博客已转移
- 阵地已转移><
- Android中来电号码归属地的显示
- Android来电号码获取代码
- Android开发中通过包名调起手机已安装的应用
- 举例说明在android中用PhoneStateListener监听手机电话状态与用发送邮件来通知来电电话的号码
- java设计模式(结构型)之享元模式
- css绝对定位、相对定位和文档流的那些事
- Andriod中的Context理解与分析(1)
- 编写一个windows driver 例子
- Connect C# to MySQL 程序中对数据库备份和还原
- Android中通过来电转移实现“电话已关机”,“此号码已停机”等
- C++类型转换总结
- 图片中的字符分割提取(基于opencv)
- java的跨平台性
- 夕阳的秀丽彩图
- “1”的数目
- java计算大数据阶乘
- CI框架(五)单一入口文件index.php分析
- RHEL 6.3 U盘启动