3

Androidフォンで着信および発信の機能を無効にしたいのですが、AndroidフォンではGPRSおよびその他のアプリケーションの実行のみが許可されている必要があります。

私のAndroidモデルはSamsungAceです

これに関する解決策を教えてください。前もって感謝します。

4

2 に答える 2

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 状態は、通話が接続されるたびに、着信通話を受信したときに呼び出されます

着信か発信かを知る方法はありません

ただし、両方のシナリオで接続しようとしている通話を終了できます

于 2012-12-10T07:46:02.140 に答える
2

あなたがグーグルのアンドロイドAPIを使ってdelevopするものは何でも。

Androidのアーキテクチャのアプリケーション層に配置されます。ただし、呼び出しの管理は、アプリケーションフレームワークレイヤーに実装されているものです。それで:

  • アプリケーションからの通話をブロックする場合は、通話状態の発生を回避できないため、テレフォニーマネージャーが通話を処理したら、telephonyService.endCall()で終了します。

  • アプリケーション層に到達しないように本当に呼び出しが必要な場合..カスタムのAndroidコンパイルが必要になると思います

  • しかし、一部の携帯電話プロバイダーが音声チャネルをブロックする「データカード」を提供していると考えたことはありますか?これらは、3Gモバイルインターネットモデムに搭載されている種類のカードです。

于 2012-12-10T08:09:17.257 に答える