2017-08-02 43 views
-2

我想编写使用eclipse女巫的Android应用程序从用户获取的电话号码,并拨打的电话号码(使用意图或别的东西)后返回该应用程序并调用因响应不同的方法(拒绝,错过了,...)机器人编程:主叫电话号码,并返回被拒绝后,合适的应用程序

我知道如何拨打电话使用意图,但不知道如何处理这种溶液(返回到App权遭到拒绝后或错过)

+0

有人问这在以前被称为此链接: https://stackoverflow.com/a/13438493/4226541 这应该是对你有好处 – ad3luc

回答

0
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class PhoneCall { 

    public static final String PARAM_CALL_DONE = "CALL_DONE"; 

    public static void call(String phoneNumber, Activity activity) { 
     CallEndedListener.createListenerFor(activity); 
     Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)); 
     activity.startActivity(callIntent); 
    } 

    private static class CallEndedListener extends PhoneStateListener { 
     private boolean called = false; 
     private final TelephonyManager telephonyManager; 
     private final Context context; 
     private Activity activity; 

     private CallEndedListener(Activity act) { 
      this.context = act.getBaseContext(); 
      this.activity = act; 
      this.telephonyManager = (TelephonyManager) context 
        .getSystemService(Activity.TELEPHONY_SERVICE); 
     } 

     public static void createListenerFor(Activity act) { 
      CallEndedListener listener = new CallEndedListener(act); 
      listener.telephonyManager.listen(listener, LISTEN_CALL_STATE); 
     } 

     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      if (called && state == TelephonyManager.CALL_STATE_IDLE) { 
       called = false; 
       telephonyManager.listen(this, PhoneStateListener.LISTEN_NONE); 
       try { 
        Intent t = new Intent(context, activity.getClass()); 
        t.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        t.putExtras(activity.getIntent()); 
        t.putExtra(PARAM_CALL_DONE, true); 
        t.setAction(Intent.ACTION_MAIN); 
        activity.finish(); 
        activity = null; 
        context.startActivity(t); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } else { 
       if (state == TelephonyManager.CALL_STATE_OFFHOOK) { 
        called = true; 
       } 
      } 
     } 
    } 
} 

通过交接参数“PARAM_CALL_DONE”,调用活动可以测试它是否被启动/恢复打完电话后。这是有道理的的onResume()来测试它 - 方法是这样的:

@Override 
protected void onResume() { 
    if (extras.getBoolean(PhoneCall.PARAM_CALL_DONE)) { 
     showInfoText(); // do whatever you like here... 

     extras.remove(PhoneCall.PARAM_CALL_DONE); 
    } 
} 

不要忘记添加的权限清单文件。

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> 
<uses-permission android:name="android.permission.CALL_PRIVILEGED"></uses-permission> 

为了使用手机,一个非常简单的方法调用应该是足够的,以“PHONENUMBER”是一个电话号码作为字符串,并从活动

PhoneCall.call(phonenumber, this); 
+0

感谢,但什么是使用的onResume额外的对象!? – R1100

+0

如果你想显示任何通话信息,然后ü可以挂断电话后显示的onResume。其可选取决于您的要求。 –

+0

对不起我在说extras.getBoolean(...)我得到错误。临时演员没有被定义为一个变量。 – R1100

相关问题