我想创建一个应用程序,我可以在一个块或允许列表中设置不同的电话号码。是否可以阻止或只允许某些电话号码,如果有的话,我将如何去做这件事。先谢了,乔纳森。阻止传入和传出的电话?
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. 阻止传出短信
- 7. 阻止传出短信
- 8. 如何阻止外出电话?
- 9. Windows Live阻止的传出电子邮件(Git补丁)
- 10. EXE上传阻止
- 11. 是否阻塞传入和传出的音频也会阻止SIP呼叫中的dtmf音?
- 12. Zimbra:阻止传出电子邮件洪水?
- 13. 使用电话管理器使用BR记录传入和传出呼叫
- 14. 在Android中阻止传出短信
- 15. addSendListener()在BlackBerry上阻止传出短信
- 16. 通过contentObserver阻止传出短信
- 17. 是否可以阻止传出短信?
- 18. 如何阻止传出流量?
- 19. 谷歌分析 - 阻止传出链接
- 20. 谷歌云 - 阻止传入连接
- 21. 退出被阻止等待传入管流的应用程序
- 22. Twilio从浏览器传出的电话
- 23. 在PhoneStateListener中应答的传出电话
- 24. 检测传入的电话呼叫
- 25. socket.io被传入的电话打断
- 26. 阅读传入的电话号码
- 27. 允许SSH传入/传出并阻止除特定端口外的所有传出
- 28. Android的Eclipse传入与传出的短信:电话号码格式?
- 29. 阻止和/或静默传入的通知
- 30. 如何显示和阻止传入的UDP数据包
contentObserver将帮助您 –
收到呼叫的广播,并使用电话ISDL结束通话。 telephony isdl包含结束呼叫方法,可帮助您结束呼叫。对于特定号码,您必须使用电话管理员检查号码 –