欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android TelephonyManager詳解及實現(xiàn)代碼

 更新時間:2016年08月11日 09:26:00   投稿:lqh  
本文主要介紹Android TelephonyManager, 這里整理了關(guān)于Android TelephoneManager的相關(guān)資料,并附有示例代碼和實現(xiàn)效果圖,有需要的朋友可以參考下

JAVA的反射機制,探秘TelephonyManager在Framework里包含卻在SDK隱藏的幾項功能。先來看看本文程序運行的效果圖:

  本文程序演示了以下功能:

       1.所有來電自動接聽;

       2.所有來電自動掛斷;

       3.開啟/關(guān)閉Radio;

       4.開啟/關(guān)閉數(shù)據(jù)連接(WAP or NET的連接)。

       調(diào)用TelephonyManager的隱藏API是先參考Framework的/base/telephony/java/com/android/internal/telephony/ITelephony.aidl,然后自己實現(xiàn)一個ITelephony.aidl,最后在TelephonyManager中通過反射機制實例化自定義的ITelephony,實例化之后就可以調(diào)用ITelephony里面的函數(shù)了。

       本文程序需要在AndroidManifest.xml添加以下兩行代碼,以獲得權(quán)限:

XML/HTML代碼:

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

  main.xml源碼如下:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" android:layout_width="fill_parent" 
  android:layout_height="fill_parent"> 
  <RadioGroup android:layout_height="wrap_content" 
    android:layout_width="fill_parent" android:id="@+id/rGrpSelect"> 
    <RadioButton android:layout_height="wrap_content" 
      android:layout_width="fill_parent" android:id="@+id/rbtnAutoAccept" 
      android:text="所有來電自動接聽"></RadioButton> 
    <RadioButton android:layout_height="wrap_content" 
      android:layout_width="fill_parent" android:id="@+id/rbtnAutoReject" 
      android:text="所有來電自動掛斷"></RadioButton> 
  </RadioGroup> 
  <ToggleButton android:layout_height="wrap_content" 
    android:layout_width="fill_parent" android:id="@+id/tbtnRadioSwitch" 
    android:textOn="Radio已經(jīng)啟動" android:textOff="Radio已經(jīng)關(guān)閉" 
    android:textSize="24dip" android:textStyle="normal"></ToggleButton> 
  <ToggleButton android:layout_height="wrap_content" 
    android:layout_width="fill_parent" android:id="@+id/tbtnDataConn" 
    android:textSize="24dip" android:textStyle="normal" android:textOn="允許數(shù)據(jù)連接" 
    android:textOff="禁止數(shù)據(jù)連接"></ToggleButton> 
</LinearLayout> 

 PhoneUtils.java是手機功能類,從TelephonyManager中實例化ITelephony并返回,源碼如下:

package com.testTelephony; 
 
import java.lang.reflect.Field; 
import java.lang.reflect.Method; 
import com.android.internal.telephony.ITelephony; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
 
public class PhoneUtils { 
  /** 
   * 從TelephonyManager中實例化ITelephony,并返回 
   */ 
  static public ITelephony getITelephony(TelephonyManager telMgr) throws Exception { 
    Method getITelephonyMethod = telMgr.getClass().getDeclaredMethod("getITelephony"); 
    getITelephonyMethod.setAccessible(true);//私有化函數(shù)也能使用 
    return (ITelephony)getITelephonyMethod.invoke(telMgr); 
  } 
   
  static public void printAllInform(Class clsShow) {  
    try {  
      // 取得所有方法  
      Method[] hideMethod = clsShow.getDeclaredMethods();  
      int i = 0;  
      for (; i < hideMethod.length; i++) {  
        Log.e("method name", hideMethod[i].getName());  
      }  
      // 取得所有常量  
      Field[] allFields = clsShow.getFields();  
      for (i = 0; i < allFields.length; i++) {  
        Log.e("Field name", allFields[i].getName());  
      }  
    } catch (SecurityException e) {  
      // throw new RuntimeException(e.getMessage());  
      e.printStackTrace();  
    } catch (IllegalArgumentException e) {  
      // throw new RuntimeException(e.getMessage());  
      e.printStackTrace();  
    } catch (Exception e) {  
      // TODO Auto-generated catch block  
      e.printStackTrace();  
    }  
  }  
} 

testTelephony.java是主類,使用PhoneStateListener監(jiān)聽通話狀態(tài),以及實現(xiàn)上述4種電話控制功能,源碼如下:

package com.testTelephony; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.view.View; 
import android.widget.RadioGroup; 
import android.widget.ToggleButton; 
 
public class testTelephony extends Activity { 
  /** Called when the activity is first created. */ 
  RadioGroup rg;//來電操作單選框 
  ToggleButton tbtnRadioSwitch;//Radio開關(guān) 
  ToggleButton tbtnDataConn;//數(shù)據(jù)連接的開關(guān) 
  TelephonyManager telMgr; 
  CallStateListener stateListner; 
  int checkedId=0; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
     
    telMgr= (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
    telMgr.listen(new CallStateListener(), CallStateListener.LISTEN_CALL_STATE); 
     
    PhoneUtils.printAllInform(TelephonyManager.class); 
     
    rg = (RadioGroup)findViewById(R.id.rGrpSelect); 
    rg.setOnCheckedChangeListener(new CheckEvent()); 
    tbtnRadioSwitch=(ToggleButton)this.findViewById(R.id.tbtnRadioSwitch); 
    tbtnRadioSwitch.setOnClickListener(new ClickEvent()); 
    try { 
      tbtnRadioSwitch.setChecked(PhoneUtils.getITelephony(telMgr).isRadioOn()); 
    } catch (Exception e) { 
      Log.e("error",e.getMessage()); 
    } 
    tbtnDataConn=(ToggleButton)this.findViewById(R.id.tbtnDataConn); 
    tbtnDataConn.setOnClickListener(new ClickEvent()); 
    try { 
      tbtnDataConn.setChecked(PhoneUtils.getITelephony(telMgr).isDataConnectivityPossible()); 
    } catch (Exception e) { 
      Log.e("error",e.getMessage()); 
    } 
  } 
   
  /** 
   * 來電時的操作 
   * @author GV 
   * 
   */ 
  public class CheckEvent implements RadioGroup.OnCheckedChangeListener{ 
 
    @Override 
    public void onCheckedChanged(RadioGroup group, int checkedId) { 
      testTelephony.this.checkedId=checkedId; 
    } 
  } 
   
  /** 
   * Radio和數(shù)據(jù)連接的開關(guān) 
   * @author GV 
   * 
   */ 
  public class ClickEvent implements View.OnClickListener{ 
 
    @Override 
    public void onClick(View v) { 
      if (v == tbtnRadioSwitch) { 
        try { 
          PhoneUtils.getITelephony(telMgr).setRadio(tbtnRadioSwitch.isChecked()); 
        } catch (Exception e) { 
          Log.e("error", e.getMessage()); 
        } 
      } 
      else if(v==tbtnDataConn){ 
        try { 
          if(tbtnDataConn.isChecked()) 
            PhoneUtils.getITelephony(telMgr).enableDataConnectivity(); 
          else if(!tbtnDataConn.isChecked()) 
            PhoneUtils.getITelephony(telMgr).disableDataConnectivity(); 
        } catch (Exception e) { 
          Log.e("error", e.getMessage()); 
        }   
      } 
    } 
  } 
   
  /** 
   * 監(jiān)視電話狀態(tài) 
   * @author GV 
   * 
   */ 
  public class CallStateListener extends PhoneStateListener { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
      if(state==TelephonyManager.CALL_STATE_IDLE)//掛斷 
      { 
        Log.e("IDLE",incomingNumber); 
      } 
      else if(state==TelephonyManager.CALL_STATE_OFFHOOK)//接聽 
      { 
        Log.e("OFFHOOK",incomingNumber); 
      } 
      else if(state==TelephonyManager.CALL_STATE_RINGING)//來電 
      { 
        if(testTelephony.this.checkedId==R.id.rbtnAutoAccept) 
        { 
          try { 
            //需要<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />  
            PhoneUtils.getITelephony(telMgr).silenceRinger();//靜鈴 
            PhoneUtils.getITelephony(telMgr).answerRingingCall();//自動接聽 
             
          } catch (Exception e) { 
            Log.e("error",e.getMessage()); 
          }   
        } 
        else if(testTelephony.this.checkedId==R.id.rbtnAutoReject) 
        { 
          try { 
            PhoneUtils.getITelephony(telMgr).endCall();//掛斷 
            PhoneUtils.getITelephony(telMgr).cancelMissedCallsNotification();//取消未接顯示 
          } catch (Exception e) { 
            Log.e("error",e.getMessage());  
          } 
        } 
      } 
      super.onCallStateChanged(state, incomingNumber); 
    } 
  } 
} 

以上就是Android TelephonyManager的介紹和簡單示例,希望能幫助有需要的同學,謝謝大家對本站的支持!

相關(guān)文章

  • Android開發(fā)之時間日期操作實例

    Android開發(fā)之時間日期操作實例

    這篇文章主要介紹了Android開發(fā)之時間日期操作,是Android程序開發(fā)中常見的一個功能,需要的朋友可以參考下
    2014-08-08
  • Android代碼檢查規(guī)則Lint的自定義與應(yīng)用詳解

    Android代碼檢查規(guī)則Lint的自定義與應(yīng)用詳解

    本文主要介紹了Android代碼檢查規(guī)則Lint的自定義與應(yīng)用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android中使用protobuf的具體示例

    Android中使用protobuf的具體示例

    本篇文章主要介紹了Android中使用protobuf的具體示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Android 處理 View 重復點擊的多種方法

    Android 處理 View 重復點擊的多種方法

    這篇文章主要介紹了Android 處理 View 重復點擊的多種方法,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下
    2021-03-03
  • Android 實現(xiàn)自己的LOG信息

    Android 實現(xiàn)自己的LOG信息

    本文主要講解Android LOG,這里對如何創(chuàng)建自己的Android LOG信息做了詳細的介紹,并附簡單代碼示例,有需要的小伙伴可以參考下
    2016-08-08
  • Android 圓角邊框的實現(xiàn)方式匯總

    Android 圓角邊框的實現(xiàn)方式匯總

    這篇文章主要介紹了Android 圓角邊框的實現(xiàn)方式匯總的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Android zxing如何識別反轉(zhuǎn)二維碼詳解

    Android zxing如何識別反轉(zhuǎn)二維碼詳解

    這篇文章主要給大家介紹了關(guān)于Android zxing如何識別反轉(zhuǎn)二維碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • Android 實現(xiàn)列表倒計時功能

    Android 實現(xiàn)列表倒計時功能

    這篇文章主要介紹了Android 實現(xiàn)列表倒計時功能,代碼很簡單,沒有任何難度,使用RecyclerView+BaseRecyclerViewAdapterHelper列表實現(xiàn),需要的朋友可以參考下
    2020-03-03
  • Android搭建grpc環(huán)境過程分步詳解

    Android搭建grpc環(huán)境過程分步詳解

    本篇文章使用的IDE是Android Studio。這里先吐槽一句,安卓項目搭建grpc環(huán)境,不管是引入插件還是引入第三方庫,對于版本的要求都極為苛刻,一旦版本不匹配就會報錯,所以對于版本的搭配一定要注意
    2023-04-04
  • Android開發(fā)簡易音樂播放器

    Android開發(fā)簡易音樂播放器

    這篇文章主要為大家詳細介紹了Android開發(fā)簡易音樂播放器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論