2013-12-08 71 views
-4

我想在android中錄製通話。我知道我必須使用廣播接收器,但是與廣播接收器一起使用是否必須使用意圖或服務?如果答案是服務,那麼任何人都可以提供相應的代碼嗎?在Android中錄製語音通話

預先感謝您。

這裏是我的接收機

public class BrCallReceive extends BroadcastReceiver { 

      @Override 
     public void onReceive(Context c, Intent i) { 

      Bundle extras = i.getExtras(); 
      Intent x = new Intent (c, EavesDropperActivity.class); 
      x.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      if (extras != null) { 
       String state = extras.getString(TelephonyManager.EXTRA_STATE); 
       Log.w("DEBUG", state); 
       if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
       Log.w("DEBUG", "MATCHES"); 
       Toast.makeText(c, 
         "Launching record APP !", 
       Toast.LENGTH_LONG).show(); 
       c.startActivity(x); 
      } 
     } 
    } 





} 




<blink> 

public class EavesDropperActivity extends Activity { 

/** Called when the activity is first created. */ 
    MediaRecorder m_recorder = new MediaRecorder(); 
    TelephonyManager t_manager ; 
    PhoneStateListener p_listener ; 
    String record_state; 
    Uri file; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.main); 
    Toast.makeText(getBaseContext(), 
      "Executing Activity", 
    Toast.LENGTH_LONG).show(); 

    t_manager = (TelephonyManager) getSystemService (Context.TELEPHONY_SERVICE); 
    p_listener = new PhoneStateListener() { 
     @Override 
     public void onCallStateChanged (int state, String incomingNumber) { 
      switch (state) { 
       case (TelephonyManager.CALL_STATE_IDLE)  : 
                  stop_recorder(); 
                          Toast.makeText(getBaseContext(), 
                  "recorder state : stop" , 
                  Toast.LENGTH_LONG).show(); 
                          //t_manager.listen(p_listener, PhoneStateListener.LISTEN_NONE); 
                  //finish(); 
                  break; 

       case (TelephonyManager.CALL_STATE_OFFHOOK)  : 
                          Toast.makeText(getBaseContext(), 
                  "recorder state : start" , 

                  break; 
       case (TelephonyManager.CALL_STATE_RINGING)  : 

                  break; 

      } 
     } 
    }; 
    t_manager.listen(p_listener, PhoneStateListener.LISTEN_CALL_STATE); 
    return; 

} 

public void start_recorder() { 
    m_recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    m_recorder.setOutputFormat(OutputFormat.THREE_GPP); 
    m_recorder.setOutputFile(Environment.getExternalStorageDirectory() +     "/songs/audionew.3gpp"); 
    m_recorder.setAudioEncoder(AudioEncoder.AMR_NB); 

     try { 
      m_recorder.prepare(); 
      m_recorder.start(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void stop_recorder() { 
    m_recorder.stop(); 
    m_recorder.release(); 
     Uri file = Uri.fromFile(
new File(Environment.getExternalStorageDirectory(),"/songs/audionew.3gpp")); 
    Toast.makeText(getBaseContext(), 
      "record stored at " + file.toString(), 
    Toast.LENGTH_LONG).show(); 

    t_manager.listen(p_listener, PhoneStateListener.LISTEN_NONE); 
    finish(); 
} 

} 

</blink> 


My manifest : 

<blink> 
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.testapp" 
android:versionCode="1" 
android:versionName="1.0" > 


<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.testapp.EavesDropperActivity" 
       android:label="@string/app_name" > 
     </activity> 

     <receiver android:name="BrCallReceive" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" > 
       </action> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

</blink> 
+2

給我teh codez !!! 1 !! 1! –

回答

2

您不能記錄在Android語音通話出於安全原因的代碼。您根本無法使用通話音頻流,無論是否使用root。

這樣做是爲了防止惡意軟件竊取個人數據等。