android程式接通和掛斷電話

來源:互聯網
上載者:User

package com.ebupt.phonerecorddemo.server;import java.lang.reflect.Method;import android.content.Context;import android.content.Intent;import android.telephony.TelephonyManager;import android.util.Log;import android.view.KeyEvent;import com.android.internal.telephony.ITelephony;public class PhoneUtils {static String TAG = "PhoneUtils";/** * 從TelephonyManager中執行個體化ITelephony,並返回 */static public ITelephony getITelephony(TelephonyManager telMgr)throws Exception {Method getITelephonyMethod = telMgr.getClass().getDeclaredMethod("getITelephony");getITelephonyMethod.setAccessible(true);// 私人化函數也能使用return (ITelephony) getITelephonyMethod.invoke(telMgr);}//自動接聽public static void autoAnswerPhone(Context c,TelephonyManager tm) {try {Log.i(TAG, "autoAnswerPhone");ITelephony itelephony = getITelephony(tm);// itelephony.silenceRinger();itelephony.answerRingingCall();} catch (Exception e) {e.printStackTrace();try {Log.e(TAG, "用於Android2.3及2.3以上的版本上");Intent intent = new Intent("android.intent.action.MEDIA_BUTTON");KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK);intent.putExtra("android.intent.extra.KEY_EVENT", keyEvent);c.sendOrderedBroadcast(intent,"android.permission.CALL_PRIVILEGED");intent = new Intent("android.intent.action.MEDIA_BUTTON");keyEvent = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_HEADSETHOOK);intent.putExtra("android.intent.extra.KEY_EVENT", keyEvent);c.sendOrderedBroadcast(intent,"android.permission.CALL_PRIVILEGED");Intent localIntent1 = new Intent(Intent.ACTION_HEADSET_PLUG);localIntent1.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);localIntent1.putExtra("state", 1);localIntent1.putExtra("microphone", 1);localIntent1.putExtra("name", "Headset");c.sendOrderedBroadcast(localIntent1,"android.permission.CALL_PRIVILEGED");Intent localIntent2 = new Intent(Intent.ACTION_MEDIA_BUTTON);KeyEvent localKeyEvent1 = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK);localIntent2.putExtra("android.intent.extra.KEY_EVENT",localKeyEvent1);c.sendOrderedBroadcast(localIntent2,"android.permission.CALL_PRIVILEGED");Intent localIntent3 = new Intent(Intent.ACTION_MEDIA_BUTTON);KeyEvent localKeyEvent2 = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_HEADSETHOOK);localIntent3.putExtra("android.intent.extra.KEY_EVENT",localKeyEvent2);c.sendOrderedBroadcast(localIntent3,"android.permission.CALL_PRIVILEGED");Intent localIntent4 = new Intent(Intent.ACTION_HEADSET_PLUG);localIntent4.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);localIntent4.putExtra("state", 0);localIntent4.putExtra("microphone", 1);localIntent4.putExtra("name", "Headset");c.sendOrderedBroadcast(localIntent4,"android.permission.CALL_PRIVILEGED");} catch (Exception e2) {e2.printStackTrace();Intent meidaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_HEADSETHOOK);meidaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);c.sendOrderedBroadcast(meidaButtonIntent, null);}}}//自動掛斷public static void endPhone(Context c,TelephonyManager tm) {try {Log.i(TAG, "endPhone");ITelephony iTelephony;Method getITelephonyMethod = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[]) null);getITelephonyMethod.setAccessible(true);iTelephony = (ITelephony) getITelephonyMethod.invoke(tm,(Object[]) null);// 掛斷電話iTelephony.endCall();} catch (Exception e) {e.printStackTrace();}}}
package com.android.internal.telephony;   /**    * Interface used to interact with the phone.  Mostly this is used by the    * TelephonyManager class.  A few places are still using this directly.    * Please clean them up if possible and use TelephonyManager instead.    * {@hide}    */ interface ITelephony {       /**        * End call or go to the Home screen  * @return whether it hung up       */    boolean endCall();            /**          * Answer the currently-ringing call.          *          * If there's already a current active call, that call will be          * automatically put on hold.  If both lines are currently in use, the         * current active call will be ended.          *        * TODO: provide a flag to let the caller specify what policy to use         * if both lines are in use.  (The current behavior is hardwired to         * "answer incoming, end ongoing", which is how the CALL button          * is specced to behave.)          *          * TODO: this should be a oneway call (especially since it's called         * directly from the key queue thread).          */         void answerRingingCall();         /**      * Silence the ringer if an incoming call is currently ringing.      * (If vibrating, stop the vibrator also.)      *      * It's safe to call this if the ringer has already been silenced, or      * even if there's no incoming call.  (If so, this method will do nothing.)      *      * TODO: this should be a oneway call too (see above).      *       (Actually *all* the methods here that return void can      *       probably be oneway.)      */      void silenceRinger();        /**     * Allow mobile data connections.     */    boolean enableDataConnectivity();    /**     * Disallow mobile data connections.     */    boolean disableDataConnectivity();    /**     * Report whether data connectivity is possible.     */    boolean isDataConnectivityPossible();} 
package com.ebupt.phonerecorddemo.server;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.telephony.TelephonyManager;import android.util.Log;public class PhoneReceiver extends BroadcastReceiver {String TAG = "PhoneReceiver";@Overridepublic void onReceive(Context context, Intent intent) {TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);switch (tm.getCallState()) {case TelephonyManager.CALL_STATE_OFFHOOK:// 電話打進來接通狀態;電話打出時首先監聽到的狀態。Log.i("onCallStateChanged", "CALL_STATE_OFFHOOK");break;case TelephonyManager.CALL_STATE_RINGING:// 電話打進來狀態Log.i("onCallStateChanged", "CALL_STATE_RINGING");PhoneUtils.autoAnswerPhone(context,tm);break;case TelephonyManager.CALL_STATE_IDLE:// 不管是電話打出去還是電話打進來都會監聽到的狀態。Log.i("onCallStateChanged", "CALL_STATE_IDLE");break;}}}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.