2017-08-02 8 views
-2

eclipse witchを使用してアンドロイドアプリを作成したい場合は、ユーザーから電話番号を取得し、電話番号(インテントなどを使用)を返します。 (拒否、逃し、...)アンドロイドプログラミング:電話番号を呼び出して拒否された直後にアプリに戻る

私はインテントを使用して番号を呼び出す方法を知っていますが、このソリューションを処理する方法はわかりません(拒否された直後にアプリケーションに戻ります)または逃した)

+0

誰かの前にこれを尋ねたActivityから呼び出されると

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

電話を使用するためには、本当に簡単なメソッド呼び出しが十分なものでなければなりません、このリンク: 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"を渡すことで、呼び出し側アクティビティは、開始/再開されたかどうかをテストできます電話の後に。

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

     extras.remove(PhoneCall.PARAM_CALL_DONE); 
    } 
} 

マニフェストファイルにパーミッションを追加することを忘れないでください。次のようなonResume()メソッドでテストしてください。 「PHONENUMBERは」文字列のように電話番号であることと

PhoneCall.call(phonenumber, this); 
+0

ありがとう!しかし、onResumeで使用されるエクストラオブジェクトは何ですか? – R1100

+0

コール情報を表示したい場合は、コールを切断した後にonResumeで表示できます。オプションはあなたの要求に依存します。 –

+0

申し訳ありませんがextras.getBoolean(...)に関するエラーが発生しました。 extrasは変数として定義されていません。 – R1100

関連する問題