呼叫记录器仅在没有firebase代码时才有效

时间:2018-06-09 08:32:48

标签: android kotlin android-service

主要活动代码

class MainActivity : AppCompatActivity() {   
     override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       Log.i("ListenerTag","onCreate")

创建用于存储录制的目录

       val folder = 
       File(Environment.getExternalStorageDirectory().toString() + 
       "/Recording")
       var success = true
       if (!folder.exists()) {
           //Toast.makeText(MainActivity.this, "Directory Does Not Exist, 
           Create It", Toast.LENGTH_SHORT).show();
           success = folder.mkdir();
       }

调用CallListener类

       val tManager = getSystemService(Context.TELEPHONY_SERVICE) as 
       TelephonyManager
       val callListener = CallListener()
       tManager.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE)
     }
  }

调用侦听器类

class CallListener: PhoneStateListener() {
   val LOG_TAG="ListenerTag"
   var mediaRecorder: MediaRecorder? = null
   lateinit var audioFilePath: String
   var isRecording = false
   var isUpload=false

在手机状态发生变化时调用

   override fun onCallStateChanged(state: Int, incomingNumber: String) {

在电话响铃时呼叫

        if (TelephonyManager.CALL_STATE_RINGING == state) {
         Log.i(LOG_TAG, "RINGING, number: $incomingNumber")

        }
呼叫处于活动状态时调用

        if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            Log.i(LOG_TAG, "OFFHOOK")
            Log.i("ListenerTag",incomingNumber)
            mediaRecorder= MediaRecorder()
            Log.i(LOG_TAG,"Media Recorder Initi")

        mediaRecorder?.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL)
            Log.i(LOG_TAG,"Audio Source Set")

        mediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
            Log.i(LOG_TAG,"Audio Format Set")
            val sdf = SimpleDateFormat("dd_M_yyyy_hh:mm")
            val currentDate = sdf.format(Date()).toString()


       audioFilePath=Environment.getExternalStorageDirectory().absolutePath 
       +"/Recording/audio_"+currentDate+".amr"
       mediaRecorder?.setOutputFile(audioFilePath)
            Log.i(LOG_TAG,"File Path Set")
            mediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
            Log.i(LOG_TAG,"Encoder Set")
            mediaRecorder?.prepare()
            Log.i(LOG_TAG,"MediaRecorder Prepared")
            Thread.sleep(2000)
            mediaRecorder?.start()
            Log.i(LOG_TAG,"MediaRecorder Started")
            isRecording = true;
            isUpload=true
         }
    if (TelephonyManager.CALL_STATE_IDLE == state ) {
        //when this state occurs, and your flag is set, restart your app

        Log.i(LOG_TAG, "IDLE")
        mediaRecorder?.stop()
        Log.i(LOG_TAG, "MediaRecorder Stooped")
        mediaRecorder?.reset()
        Log.i(LOG_TAG, "MediaRecorder Reset")
        mediaRecorder?.release()
        Log.i(LOG_TAG, "MediaRecorder Release")
        isRecording = false

当此firebase代码不存在时,应用程序运行良好,但当代码存在时,应用程序仅发送一次录制,然后应用程序停止工作

        if(isUpload==true){
            mStorageRef = FirebaseStorage.getInstance().getReference();
            var firebaseFilePath = 
            mStorageRef.child("Audio").child(audioFilePath)
            var uri = Uri.fromFile(File(audioFilePath))
            firebaseFilePath.putFile(uri)

            .addOnSuccessListener(OnSuccessListener<UploadTask.TaskSnapshot> 
            { taskSnapshot ->
                        // Get a URL to the uploaded content
                        val downloadUrl = taskSnapshot.downloadUrl
                    })
                    .addOnFailureListener(OnFailureListener {
                        // Handle unsuccessful uploads
                        // ...
                    })
            Log.i(LOG_TAG,"Upload fun end")
            isUpload=false
        }
    }
}

0 个答案:

没有答案