2017-08-02 36 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

相關問題