如何禁用传入和放大在Android手机中拨打电话

时间:2012-12-10 07:43:48

标签: android

我想在Android手机中禁用来电和去电功能。我的Android手机应该只允许GPRS&其他应用程序。

我的Android模型是三星Ace

请建议我解决此问题。在此先感谢。

2 个答案:

答案 0 :(得分:4)

此代码将阻止您的所有电话(收入和退出)

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状态会在您的通话连接和来电时接听

没有任何方法您可以知道天气是来电或拨打电话

但你可以结束在两个场景中连接的呼叫

答案 1 :(得分:2)

您使用谷歌的Android API delevop ..

将位于Android's architcture的“应用程序”层中。但是,管理调用是在Applications Framework层中实现的。所以:

  • 如果要阻止来自应用程序的呼叫,则无法避免电话呼叫状态发生,因此一旦电话管理器处理完呼叫,请使用telephonyService.endCall()结束呼叫。

  • 如果你真的需要电话不要到达你的应用层..我认为需要自定义的android编译

  • 但您是否考虑过某些移动电话提供商提供阻止语音通道的“数据卡”?这些是3G移动互联网调制解调器中的卡片