我想禁用安卓手机的来电和去电功能。我的安卓手机应该只允许运行 GPRS 和其他应用程序。
我的安卓机型是三星王牌
请建议我对此的解决方案。提前致谢。
此代码将阻止您的所有通话(传入和传出)
import java.lang.reflect.Method;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import com.CallLogApp.helper.BlockNumberHelper;
import com.CallLogApp.util.UDF;
import com.android.internal.telephony.ITelephony;
public class CustomPhoneStateListener extends PhoneStateListener {
//private static final String TAG = "PhoneStateChanged";
Context context;
public CustomPhoneStateListener(Context context) {
super();
this.context = context;
}
@Override
public void onCallStateChanged(int state, String outGoingNumber) {
super.onCallStateChanged(state, outGoingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
endCallIfBlocked(outGoingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
default:
break;
}
}
private void endCallIfBlocked(String outGoingNumber) {
try {
// Java reflection to gain access to TelephonyManager's
// ITelephony getter
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Class<?> c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm);
if (new BlockNumberHelper(context).isBlocked(outGoingNumber))
{
telephonyService = (ITelephony) m.invoke(tm);
telephonyService.silenceRinger();
telephonyService.endCall();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
每当您的呼叫将要连接和接到来电时,这里的 CALL_STATE_OFFHOOK 状态将调用
没有任何方法可以知道是来电还是去电
但是您可以结束在两种情况下都将连接的呼叫
您使用 google 的 android API 开发的任何内容。
将位于Android 架构的 Applications 层。但是管理调用是在应用程序框架层中实现的。所以:
如果您想阻止来自应用程序的呼叫,则无法避免发生电话呼叫状态,因此一旦电话管理器处理了呼叫,请使用 telephonyService.endCall() 结束它。
如果您真的需要调用不到达您的应用程序层..我认为需要自定义 android 编译
但是您是否考虑过一些移动电话提供商提供“数据卡”来阻止语音通道?这些是 3G 移动互联网调制解调器中的卡类型