我想创建一个应用程序,我可以在一个块或允许列表中设置不同的电话号码。是否可以阻止或只允许某些电话号码,如果有的话,我将如何去做这件事。先谢了,乔纳森。阻止传入和传出的电话?
0
A
回答
0
听起来像你必须创建一个与注册的PhoneStateListener服务,它使您可以收听有关更改手机状态的事件。所以如果有人打电话给你,你可以在你的听众那里捕捉到这个事件并作出相应的反应你自己PhoneStateListener看起来是这样的:
public class CustomPhoneStateListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
doSomething();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
doSomething();
break;
case TelephonyManager.CALL_STATE_RINGING:
if(incomingNumber.equels(blockedNumber)) {
blockNumber();
}
break;
}
}
}
在手机状态等于CALL_STATE_RINGING你可以把你的逻辑,如果来电号码在等于要阻止的号码来电的情况下你的“阻塞的号码清单”。为了得到它所有的工作,你必须在你的服务中注册这个监听器(在onCreate方法中,不要忘记在onDestroy中注销它),并且为你的android清单添加一个权限,使你能够阅读手机状态。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
0
第一件事就是创建一个广播reciever: 1)添加到体现
2)reciever:
public class CallReciever extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
ArrayList<String> rejectList=getListFromDb()//you need to implement this method
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING))
{
String num = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
if (rejectList.Contains(num))
{
disconnectCall();
}
}
public void disconnectCall(){
try {
String serviceManagerName = "android.os.ServiceManager";
String serviceManagerNativeName = "android.os.ServiceManagerNative";
String telephonyName = "com.android.internal.telephony.ITelephony";
Class<?> telephonyClass;
Class<?> telephonyStubClass;
Class<?> serviceManagerClass;
Class<?> serviceManagerNativeClass;
Method telephonyEndCall;
Object telephonyObject;
Object serviceManagerObject;
telephonyClass = Class.forName(telephonyName);
telephonyStubClass = telephonyClass.getClasses()[0];
serviceManagerClass = Class.forName(serviceManagerName);
serviceManagerNativeClass = Class.forName(serviceManagerNativeName);
Method getService = // getDefaults[29];
serviceManagerClass.getMethod("getService", String.class);
Method tempInterfaceMethod = serviceManagerNativeClass.getMethod("asInterface", IBinder.class);
Binder tmpBinder = new Binder();
tmpBinder.attachInterface(null, "fake");
serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone");
Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class);
telephonyObject = serviceMethod.invoke(null, retbinder);
telephonyEndCall = telephonyClass.getMethod("endCall");
telephonyEndCall.invoke(telephonyObject);
} catch (Exception e) {
e.printStackTrace();
Log.e("GABI",
"FATAL ERROR: could not connect to telephony subsystem");
Log.e("GABI", "Exception object: " + e);
}
}
}
现在,一旦你开始你的应用程序至少一次这样才有效。 (你可以打电话给你的应用程序中使用另一个reciever,将调用startActivity在启动时自动服务) 的permisions并声明它是:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="com.my.CustomReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
相关问题
- 1. 如何阻止传入的电话,短信和电子邮件目标C
- 2. 阻止/取消阻止呼叫。传入/传出之间的差异
- 3. 阻止传出短信
- 4. 阻止传出短信
- 5. 如何阻止外出电话?
- 6. Windows Live阻止的传出电子邮件(Git补丁)
- 7. EXE上传阻止
- 8. 是否阻塞传入和传出的音频也会阻止SIP呼叫中的dtmf音?
- 9. 使用电话管理器使用BR记录传入和传出呼叫
- 10. 是否可以阻止传出短信?
- 11. 通过contentObserver阻止传出短信
- 12. 如何阻止传出流量?
- 13. 谷歌分析 - 阻止传出链接
- 14. addSendListener()在BlackBerry上阻止传出短信
- 15. 谷歌云 - 阻止传入连接
- 16. 退出被阻止等待传入管流的应用程序
- 17. Twilio从浏览器传出的电话
- 18. socket.io被传入的电话打断
- 19. 检测传入的电话呼叫
- 20. Android的Eclipse传入与传出的短信:电话号码格式?
- 21. 将数据传入和传出CKEditor/jQuery-UI模式对话框
- 22. exe文件上传阻止
- 23. Android:重定向传出电话
- 24. 获取传入电话号码
- 25. Rails验证阻止电子邮件地址和电话号码
- 26. 在android中阻止传入呼叫和短信
- 27. 如何阻止iphone中的呼入电话
- 28. 电话和传真服务API
- 29. 更改传入和传出UDP通信
- 30. 检测短信传入和传出
contentObserver将帮助您 –
收到呼叫的广播,并使用电话ISDL结束通话。 telephony isdl包含结束呼叫方法,可帮助您结束呼叫。对于特定号码,您必须使用电话管理员检查号码 –