2012-12-10 5 views
3

Я хочу отключить функцию входящих и исходящих вызовов в телефоне Android. Мой телефон Android должен разрешать только GPRS & другим приложениям, которые нужно запустить.Как отключить входящие и исходящие вызовы в телефоне android

My Android модель Samsung Ace

Пожалуйста, предложите мне решение относительно этого. Заранее спасибо.

ответ

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

Что такое com.android.internal.telephony.ITelephony и BlockNumberHelper здесь? –

2

Все, что вы delevop с помощью андроида API от Google ..

будет находиться в Applications слое Android's architcture. Но управление вызовами реализовано на уровне приложений. Итак:

  • Если вы хотите, чтобы блокировать вызовы от приложения, которое вы не можете избежать состояния телефонного звонка произойдет, так как только менеджер телефонии обработала вызов, закончить его с telephonyService.endCall().

  • Если вам действительно нужно звонить, чтобы не достичь вашего уровня приложения .. Я думаю, что пользовательские андроид компиляции необходимо будет

  • Но вы рассмотрели, что некоторые поставщики услуг мобильной телефонной связи предлагают «карты данных», для которых они блокируют голосовые каналы? Таковы карты, которые входят в модемы 3G для мобильного интернета

Смежные вопросы