如何以编程方式断开传出呼叫

时间:2012-04-03 04:26:39

标签: android

我使用以下代码以编程方式断开调用,但它无效。

private void callDisconnect(){ 
    try{ 
        TelephonyManager manager = (TelephonyManager)this.getSystemService(this.TELEPHONY_SERVICE); 
        Class c = Class.forName(manager.getClass().getName()); 
        Method m = c.getDeclaredMethod("getITelephony"); 
        m.setAccessible(true); 
        ITelephony telephony = (ITelephony)m.invoke(manager); 
        telephony.endcall(); 
    } catch(Exception e){ 
        Log.d("",e.getMessage()); 
    } 
}

任何人都可以帮我吗?我是否需要更改代码或其他内容...... ??

5 个答案:

答案 0 :(得分:5)

要以编程方式断开呼叫,您必须在项目中添加ITelephony.AIDL文件。如果您已添加,则您的包名称必须为com/android/internal/telephony/ITelephony.AIDL:有关详细信息,请参阅Blocking Incoming call。从here下载AIDL文件。

断开呼叫使用ITelephony的endCall();方法

答案 1 :(得分:5)

只需使用此广播接收器即可。我在我的一个应用程序中对它进行了测试,结果非常好。

public class MyBroadcastReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, final Intent intent)
    {


        if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL))
        {
            String phoneNumber = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER);

            if (phoneNumber.equals("123456"))
            {
                if (getResultData() != null)
                {

                    setResultData(null);
                }


            }

        }


    }

}

答案 2 :(得分:1)

在较新版本的android中不再可能。如果呼叫已经启动,则用户决定何时结束呼叫。但是你可以阻止来电的发生。

答案 3 :(得分:1)

您可以使用广播接收器的onReceive方法中的setResultData(null)函数来阻止传出呼叫。

公共类BlockOutgoing扩展了BroadcastReceiver {

String number;
@Override
public void onReceive(Context context, Intent intent) 
{
    Log.d("12280", "asdasNumber is-->> " + number);
    number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    setResultData(null);
    Toast.makeText(context, "Outgoing Call Blocked" , 5000).show();
}

}

   <receiver
        android:name=".BlockOutgoing"
        android:label="@string/app_name" >
        <intent-filter android:priority="1">

            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

        </intent-filter>
    </receiver>

答案 4 :(得分:-1)

你无法在Android 2.3 +中使用你的代码结束这样的通话......我认为只有用户可以结束他的通话......对于早期版本You can see this link This one < / p>