Android中的来电阻止
Posted
技术标签:
【中文标题】Android中的来电阻止【英文标题】:Incoming Call Blocking in Android 【发布时间】:2013-01-02 10:02:11 【问题描述】:我可以在 android 中阻止来电,但问题是它在断开时间之前响了几秒钟。如何不响铃就直接断开电话?
我在Manifest
文件中添加了权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-feature android:name="android.hardware.telephony" />
然后创建IDL
接口以获取核心电话服务。
package com.android.internal.telephony;
interface ITelephony
boolean endCall();
void answerRingingCall();
void silenceRinger();
然后为来电制作广播接收器。
public class PhonecallReceiver extends BroadcastReceiver
Context context = null;
@Override
public void onReceive(Context context, Intent intent)
Log.i(TAG, "Receving call...");
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
try
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService = (ITelephony) m.invoke(telephony);
Bundle b = intent.getExtras();
String incommingNumber = b.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
telephonyService.endCall();
catch (Exception e) e.printStackTrace();
【问题讨论】:
【参考方案1】:暂时是不可能的任务。 在这里查看原因:Why it is impossible to intercept incoming calls on Android
但我建议你还是我自己采用的临时解决方案:
在阻止通话之前,你需要做的第一件事是检索手机当前的振铃模式,然后打开静音:
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
int ringerMode = audiomanage.getRingerMode();
audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT);
阻塞呼叫后(或不阻塞)给你初始模式:
audiomanage.setRingerMode(ringerMode);
您需要这些权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
希望对你有所帮助。
【讨论】:
以上是关于Android中的来电阻止的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 原生来电屏幕上弹出窗口,如真正的来电者 Android 应用程序