为什么我的通话记录应用程序无法正常工作?

时间:2020-10-17 11:17:04

标签: java android

我正在尝试实现一个允许我记录通话音频的应用程序,并通过切换按钮激活该服务。我无法弄清楚代码的问题,因为一旦将切换按钮设置为“开”并开始通话,就不会保存任何文件。 我不知道问题出在保存(也许是我在错误的目录中查找文件?),或者实际上并没有记录。 我正在使用AndroidStudio 4.0,并且正在我的Samsung S9上尝试我的应用。

感谢andvance的帮助!

RecordService.java

string url = "https://www.somesite.com/Service";
string postData = "text to send";
var data = Encoding.ASCII.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.Proxy = null;
request.AllowAutoRedirect = false;
request.UserAgent = "Mozilla/5.0";
request.ContentType = "text/x-gwt-rpc; charset=UTF-8";
request.Headers.Add("Cookie", SetCookie);//get it after login
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream()); 
string responseText = reader.ReadToEnd();

ActivityButton1.java

package com.example.registrachiamate;

import android.app.MediaRouteButton;
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;
import android.text.format.DateFormat;

import java.io.File;
import java.io.IOException;
import java.util.Date;

public class RecordService extends Service {
    private MediaRecorder rec;
    private File file;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //return super.onStartCommand(intent, flags, startId);
        file= Environment.getExternalStorageDirectory();
        Date date=new Date();
        CharSequence sdf= DateFormat.format("MM-dd-yy-hh-mm--ss",date.getTime());
        rec=new MediaRecorder();
        rec.setAudioSource(MediaRecorder.AudioSource.MIC);
        rec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        rec.setOutputFile(file.getAbsolutePath()+"/"+sdf+"rec.3gp");
        rec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

        TelephonyManager manager=(TelephonyManager) getApplicationContext().getSystemService(getApplicationContext().TELEPHONY_SERVICE);
        assert manager != null;
        manager.listen(new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String phoneNumber) {
                //super.onCallStateChanged(state, phoneNumber) {

                if (TelephonyManager.CALL_STATE_IDLE==state){

                rec.stop();
                rec.reset();
                 rec.release();
                    stopSelf();
                }else if(TelephonyManager.CALL_STATE_OFFHOOK==state && rec==null){

                    try {
                        rec.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    rec.start();


                }

                }

        },PhoneStateListener.LISTEN_CALL_STATE);

        return START_STICKY;
    }
}

AndroidManifest.xml,如果我将RecordService放到其中,它将停止运行

package com.example.registrachiamate;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.widget.ToggleButton;

import androidx.appcompat.app.AppCompatActivity;

public class ActivityButton1 extends AppCompatActivity {
    ToggleButton startandoff;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button1);
        startandoff=(ToggleButton)findViewById(R.id.toggleButton);


    }

   public void tooglebutton(View view)
   {
       boolean checked=((ToggleButton)view).isChecked();
       if (checked){

           Intent intent=new Intent(this,RecordService.class);
           startService(intent);
           Toast.makeText(getApplicationContext(),"Call Record STARTED",Toast.LENGTH_SHORT).show();

       }else {

           Intent intent=new Intent(this,RecordService.class);
           stopService(intent);
           Toast.makeText(getApplicationContext(),"Call Record STOPPED",Toast.LENGTH_SHORT).show();


   }
}
}

0 个答案:

没有答案
相关问题