Я проходил через учебник, чтобы создать диктофон, который затем загрузит запись в Firebase. Я смотрел учебник много раз и убедился, что приложение подключено к Firebase; однако приложение не откроется прямо сейчас, скорее всего, из-за этой проблемы. Я довольно новичок в программировании Java. Может кто-то, пожалуйста, предоставить мне некоторые рекомендации? Спасибо!
package bfb.ess.myapplicationbfb;
import android.app.ProgressDialog;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import java.io.File;
import java.io.IOException;
public class speakp extends AppCompatActivity {
private Button mRecordBtn;
private TextView mRecordlabel;
private MediaRecorder mRecorder;
private String mFileName = null;
private static final String LOG_TAG = "Record_log";
private StorageReference mStorage;
private ProgressDialog mProgress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recordpage);
mStorage = FirebaseStorage.getInstance().getReference();
mRecordlabel = (TextView) findViewById(R.id.recordlabel);
mRecordBtn =(Button) findViewById(R.id.recordBtn);
mProgress = new ProgressDialog(this);
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName +="/recorded_audio.3gp";
mRecordBtn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
startRecording();
mRecordlabel.setText("Recording Started ...");
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
stopRecording();
mRecordlabel.setText("Recording Stopped ...");
}
return false;
}
});
}
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
private void stopRecording() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
uploadAudio();
}
private void uploadAudio() {
mProgress.setMessage("Uploading Audio ...");
mProgress.show();
StorageReference filepath = mStorage.child("Audio").child("new_audio.3gp");
Uri uri = Uri.fromFile(new File(mFileName));
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mProgress.dismiss();
mRecordlabel.setText("Uploading Finished");
}
});
}
}
Перейдите в консоль Firebase и обновите правила чтения и записи для хранилища
Вы можете посмотреть пример Google Firebase: образец хранения
Проверьте URI аудиофайла, если он правильный. Потому что я предполагаю, lastPathSegment of uri становится неисправен.
по умолчанию:
Обновите его до:
Примечание:
Это обновление позволит вам хранить данные, даже если вы не авторизованы.
Это только для целей разработки, потому что это может вызвать проблему безопасности доступа к данным без получения авторизации.
Поэтому будьте осторожны при загрузке приложения в play store, обновите этот параметр и измените его в соответствии с вашими требованиями.
Необходимо обновить правила чтения и записи для хранилища в консоли firebase,
Перейдите в консоль Firebase, выберите Хранилище
Нажмите на вкладку правила
по умолчанию:
Изменить на:
как Mohom.R сказал
Примечание: это обновление позволит вам хранить данные, даже если вы не авторизованы. Это только для целей разработки, потому что это может вызвать проблему безопасности доступа к данным без получения авторизации. Поэтому будьте осторожны при загрузке приложения в play store, обновите этот параметр и измените его в соответствии с вашими требованиями.