发送未接来电 - Android程序

时间:2015-07-04 11:23:11

标签: android phone-call

我想写一个Android应用程序,可以发送一个未接来电。这意味着应用程序调用sb约5秒。 我知道这段代码开始调用。

private void call() {

    try {

        Intent callIntent = new Intent(Intent.ACTION_CALL);

        callIntent.setData(Uri.parse("tel:123456789"));

        startActivity(callIntent);

    } catch (ActivityNotFoundException e) {

        Log.e("helloandroid dialing example", "Call failed", e);

    }

}

但我不知道如何阻止它(5秒后)?

Ps.This问题得到了-1,因为问题是愚蠢的,或者我的英语不好?

2 个答案:

答案 0 :(得分:0)

没有直接的方法可以执行此操作,因为一旦启动callIntent,控件将转到调用应用程序。

但是有一些解决方法可以通过使用java反射获取TelephonyManager的{​​{1}}对象来实现此目的。

     TelephonyManager tm = (TelephonyManager) context
            .getSystemService(Context.TELEPHONY_SERVICE);
     try {
            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);
       }catch(Exception e){}

       telephonyService.endCall();

源: call-control-in-android

答案 1 :(得分:0)

最简单的方法是使用延迟处理程序,并在调用目标号码后对自己进行新的调用。希望这不是垃圾邮件的目的,这是不赞成的。在您的代码snipplet或循环中,您可以使用下面的

if (checkPermission(Manifest.permission.CALL_PHONE)) {//targetMSISDN the phone no you are calling out to


                    String dial = "tel:" + targetMSISDN;
                    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial)));
                    //startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial))); 

                    //delay a drop call
                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            //Do something after 10000ms

                            Toast.makeText(YourNotSpamActivity.this, "Calling me to end you!", Toast.LENGTH_SHORT).show();

                            //end call now

                            String TAG="ERR:";
                            try {

                                Log.v(TAG, "Get getTeleService...");
                                if (checkPermission(Manifest.permission.CALL_PHONE)) {

                                    String dial = "tel:YourPhoneNumber";
                                    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial)));//call yourself to terminate the first call
                                }

                            } catch (Exception e) {
                                e.printStackTrace();
                                Log.e(TAG,
                                        "FATAL ERROR: couldn't call ");
                                Log.e(TAG, "Exception object: " + e);
                            }
                        }
                    }, 10000);

                    //end the end call
                } else {
                    Toast.makeText(YourNotSpamActivity.this, "Permission Call Phone denied", Toast.LENGTH_SHORT).show();
                }