国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android實現接通和掛斷電話

2019-10-22 18:11:59
字體:
來源:轉載
供稿:網友

本文實例為大家分享了android實現接通和掛斷電話的具體代碼,供大家參考,具體內容如下

關鍵代碼:【PhoneUtils類】

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();   }  }  } 

需要用到的ITelephony.aidl:

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(); } 

監聽通話廣播【PhoneReceiver.java】:

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";  @Override  public 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;   }  }    } 

在上面類適當的地方加上掛斷或接通電話的代碼即可。

最后別忘記在AndroidManifest.xml里聲明和注冊權限。

<uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" > </uses-permission> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> 
<receiver android:name="com.ebupt.phonerecorddemo.server.PhoneReceiver" >  <intent-filter android:priority="2147483647" >  <action android:name="android.intent.action.PHONE_STATE" >  </action>  </intent-filter> </receiver> 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 策勒县| 油尖旺区| 凤山县| 台江县| 平阳县| 定襄县| 民丰县| 彰化市| 偃师市| 五华县| 德江县| 集贤县| 桦川县| 永春县| 淄博市| 宿州市| 平谷区| 广南县| 兰考县| 称多县| 金寨县| 鸡西市| 绩溪县| 长沙市| 雷山县| 甘孜县| 磴口县| 监利县| 东明县| 济源市| 栾川县| 黑河市| 思南县| 建平县| 太保市| 宣化县| 黄骅市| 奉节县| 敦煌市| 麻阳| 岑巩县|