Android開發之監聽手機來電
TelephonyManager是一個管理手機通話狀態、電話網絡信息的服務類,該類提供了大量的getXxx(),方法獲取電話網絡的相關信息。關于TelephonyManager的詳解可以參照:Android開發之獲取手機SIM卡信息</span></span></span> 程序運行結果:
log_phone文件:
應用實例:
package com.jph.monitorphone;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; /** * Describe:</br> * 監視手機來電 * 本實例實現了監視當前手機的來電狀態, * 并將來電與接聽紀錄寫入log_phone文件中 * @author jph * Date:2014.07.22 * */ public class MonitorPhone extends Activity { TelephonyManager tManager; private String incomingNumber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //獲取系統的TelephonyManager對象 tManager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //創建一個通話狀態監聽器 PhoneStateListener pListener=new PhoneStateListener(){ @Override public void onCallStateChanged(int state, String number) { // TODO Auto-generated method stub switch (state) { case TelephonyManager.CALL_STATE_IDLE://無任何狀態 break; case TelephonyManager.CALL_STATE_OFFHOOK://接聽來電 writeFile(state,number); break; case TelephonyManager.CALL_STATE_RINGING://來電 incomingNumber=number; writeFile(state,number); break; default: break; } super.onCallStateChanged(state, incomingNumber); } }; //為tManager添加監聽器 tManager.listen(pListener, PhoneStateListener.LISTEN_CALL_STATE); } //將接聽電話,與來電信息寫入到文件 protected void writeFile(int state, String number) { // TODO Auto-generated method stub StringBuffer sb=new StringBuffer(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh.mm.ss"); sb.append("時間:"+sdf.format(new Date())+"\n"); switch (state) { case TelephonyManager.CALL_STATE_OFFHOOK://接聽來電 sb.append("接聽了電話號為:"+incomingNumber+"的電話"); break; case TelephonyManager.CALL_STATE_RINGING://來電 sb.append(number+"來電"); break; } sb.append("\n-----------------------\n"); FileOutputStream fos=null; try { //以追加的方式打開輸出流 fos=openFileOutput("log_phone", MODE_APPEND); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //將輸出流封裝成PrintStream對象 PrintStream ps=new PrintStream(fos); //輸入文件內容 ps.println(sb.toString()); //關閉輸出流 ps.close(); } } </pre><a href="/misc/goto?guid=4959555531880731292" target="_blank" title="派生到我的代碼片" style="text-indent:0;"></a></div>
</div>
</div>
最后別忘為應用添加相應的權限:AndroidManifest.xml
</div> </div><!-- 授予應用讀取通話狀態的權限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
實例分析:
本應用是通過Activity實現的,如果把實例中的代碼放到后臺執行的Service中運行,并設置Service組件跟隨系統啟動,那個這種監聽就可以做到“神不知,鬼不覺”了。嘿嘿.............
來自:http://blog.csdn.net/fengyuzhengfan/article/details/38039549本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關資訊
相關文檔
目錄