0

我是android.I的新手,我看到很多例子,但都不幫助我。我想要的例子或教程如何在android中記錄傳入和傳出的呼叫。這個很好的教程?如何在android中記錄通話

+0

如果你可以購買代碼...這是好的HTTP://www.chupamobile.com/android-full-applications/call-recorder-4151 ... –

回答

0

好吧,首先你需要使用Device Policy Manager,並且需要製作你的設備管理設備。之後,您必須創建一個BroadCaast接收器和一個服務。我在這裏發佈代碼,工作正常。

MainActivity:

public class MainActivity extends Activity { 
    private static final int REQUEST_CODE = 0; 
    private DevicePolicyManager mDPM; 
    private ComponentName mAdminName; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try { 
      // Initiate DevicePolicyManager. 
      mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 
      mAdminName = new ComponentName(this, DeviceAdminDemo.class); 

      if (!mDPM.isAdminActive(mAdminName)) { 
       Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
       intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName); 
       intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Click on Activate button to secure your application."); 
       startActivityForResult(intent, REQUEST_CODE); 
      } else { 
       // mDPM.lockNow(); 
       // Intent intent = new Intent(MainActivity.this, 
       // TrackDeviceService.class); 
       // startService(intent); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (REQUEST_CODE == requestCode) { 
       Intent intent = new Intent(MainActivity.this, TService.class); 
       startService(intent); 
     } 
    } 

} 

// DeviceAdminDemo類

public class DeviceAdminDemo extends DeviceAdminReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
    } 

    public void onEnabled(Context context, Intent intent) { 
    }; 

    public void onDisabled(Context context, Intent intent) { 
    }; 
} 

// TService類

public class TService extends Service { 
    MediaRecorder recorder; 
    File audiofile; 
    String name, phonenumber; 
    String audio_format; 
    public String Audio_Type; 
    int audioSource; 
    Context context; 
    private Handler handler; 
    Timer timer; 
    Boolean offHook = false, ringing = false; 
    Toast toast; 
    Boolean isOffHook = false; 
    private boolean recordstarted = false; 

    private static final String ACTION_IN = "android.intent.action.PHONE_STATE"; 
    private static final String ACTION_OUT = "android.intent.action.NEW_OUTGOING_CALL"; 
    private CallBr br_call; 




    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     Log.d("service", "destroy"); 

     super.onDestroy(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // final String terminate =(String) 
     // intent.getExtras().get("terminate");// 
     // intent.getStringExtra("terminate"); 
     // Log.d("TAG", "service started"); 
     // 
     // TelephonyManager telephony = (TelephonyManager) 
     // getSystemService(Context.TELEPHONY_SERVICE); // TelephonyManager 
     // // object 
     // CustomPhoneStateListener customPhoneListener = new 
     // CustomPhoneStateListener(); 
     // telephony.listen(customPhoneListener, 
     // PhoneStateListener.LISTEN_CALL_STATE); 
     // context = getApplicationContext(); 

     final IntentFilter filter = new IntentFilter(); 
     filter.addAction(ACTION_OUT); 
     filter.addAction(ACTION_IN); 
     this.br_call = new CallBr(); 
     this.registerReceiver(this.br_call, filter); 

     // if(terminate != null) { 
     // stopSelf(); 
     // } 
     return START_NOT_STICKY; 
    } 

    public class CallBr extends BroadcastReceiver { 
     Bundle bundle; 
     String state; 
     String inCall, outCall; 
     public boolean wasRinging = false; 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(ACTION_IN)) { 
       if ((bundle = intent.getExtras()) != null) { 
        state = bundle.getString(TelephonyManager.EXTRA_STATE); 
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
         inCall = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
         wasRinging = true; 
         Toast.makeText(context, "IN : " + inCall, Toast.LENGTH_LONG).show(); 
        } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
         if (wasRinging == true) { 

          Toast.makeText(context, "ANSWERED", Toast.LENGTH_LONG).show(); 

          String out = new SimpleDateFormat("dd-MM-yyyy hh-mm-ss").format(new Date()); 
          File sampleDir = new File(Environment.getExternalStorageDirectory(), "/TestRecordingDasa1"); 
          if (!sampleDir.exists()) { 
           sampleDir.mkdirs(); 
          } 
          String file_name = "Record"; 
          try { 
           audiofile = File.createTempFile(file_name, ".amr", sampleDir); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
          String path = Environment.getExternalStorageDirectory().getAbsolutePath(); 

          recorder = new MediaRecorder(); 
//       recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 

          recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION); 
          recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); 
          recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
          recorder.setOutputFile(audiofile.getAbsolutePath()); 
          try { 
           recorder.prepare(); 
          } catch (IllegalStateException e) { 
           e.printStackTrace(); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
          recorder.start(); 
          recordstarted = true; 
         } 
        } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
         wasRinging = false; 
         Toast.makeText(context, "REJECT || DISCO", Toast.LENGTH_LONG).show(); 
         if (recordstarted) { 
          recorder.stop(); 
          recordstarted = false; 
         } 
        } 
       } 
      } else if (intent.getAction().equals(ACTION_OUT)) { 
       if ((bundle = intent.getExtras()) != null) { 
        outCall = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
        Toast.makeText(context, "OUT : " + outCall, Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
    } 

} 

//權限清單文件

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.STORAGE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

//聲明如下事情的清單:

申報DeviceAdminDemo類來體現:

<receiver 
      android:name="com.example.voicerecorder1.DeviceAdminDemo" 
      android:description="@string/device_description" 
      android:label="@string/device_admin_label" 
      android:permission="android.permission.BIND_DEVICE_ADMIN" > 
      <meta-data 
       android:name="android.app.device_admin" 
       android:resource="@xml/my_admin" /> 


      <intent-filter> 
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
       <action android:name="android.app.action.DEVICE_ADMIN_DISABLED" /> 
       <action android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" /> 
      </intent-filter> 
     </receiver> 

<service android:name=".TService" > 
     </service> 

//my_admin.xml

<device-admin xmlns:android="http://schemas.android.com/apk/res/android" > 
    <uses-policies> 
     <force-lock /> 
    </uses-policies> 
</device-admin> 
+0

如何會是這個的輸出嗎? – user3709680

+0

它將創建一個名爲「TestRecordingDasa1」的文件夾,並在其中創建「Record.amr」,這是您的錄製通話記錄。 –

+0

你能發送main_activity佈局嗎? – user3709680

0

那麼你可以使用被稱爲通話錄音Android應用來自Google Play

Call Recorder 我以前從來沒有嘗試過這是它的第一個鏈接* gle 祝你好運。

  • 亞倫PM