2017-12-06 15 views
0

目的 - 私は実際にボタンをタップするとアプリが鳴ります(小さなオーディオを再生します)&それ。 私の目標 - ユーザーがボタンを押したときに録音を開始します。&は、ユーザーがボタンを離したときに停止します。 uはこれを行うには良い方法は教えてPLSのを知っていれば、レコードボタンボタンを押してアンドロイドアプリにオーディオを録音する

に触れる上

public class MainActivity extends AppCompatActivity { 
private static final String LOG_TAG = "AudioRecordTest"; 
private Button ring,record; 
private String outputfile = null; 
private MediaRecorder rec = null; 
private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200; 
// Requesting permission to RECORD_AUDIO 
private boolean permissionToRecordAccepted = false; 
private String [] permissions = {Manifest.permission.RECORD_AUDIO}; 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode){ 
     case REQUEST_RECORD_AUDIO_PERMISSION: 
      permissionToRecordAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; 
      break; 
    } 
    if (!permissionToRecordAccepted) finish(); 

} 




private void startrec() 
{ 
    Log.e(LOG_TAG, "startRecording:Calling "); 
    rec = new MediaRecorder(); 
    rec.setAudioSource(MediaRecorder.AudioSource.MIC); 
    rec.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); 
    rec.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
    outputfile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/rec.amr"; 
    rec.setOutputFile(outputfile); 
    try { 
     rec.prepare(); 
     rec.start(); 
    } catch (IOException ioe2) { 
    } 
    Toast.makeText(MainActivity.this, "RECORDING STARTED", Toast.LENGTH_SHORT).show(); 

} 
private void stoprec(){ 
    rec.stop();rec.release(); 
    Toast.makeText(MainActivity.this, "RECORDING STOPPED", Toast.LENGTH_SHORT).show(); 
    Log.e(LOG_TAG, "stopRecording:Calling "); 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ring = findViewById(R.id.ringbutton); 
    record =findViewById(R.id.recordbutton); 

    ring.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v1) { 
      try { 
       Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
       Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
       r.play(); 
      } catch (IllegalStateException ise) {} 
     } 
    }); 

    record.setOnTouchListener(new View.OnTouchListener(){ 
     @Override 
     public boolean onTouch(View v2, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) startrec(); 
     else if (event.getAction() == MotionEvent.ACTION_UP) stoprec(); 
      return true;} 
    }); 
} 

}

Problem-アプリがクラッシュします。

答えて

0

あなたはOnTouchListenerイベントを使用し、ACTION_DOWNで記録を開始し、ACTION_UPで停止する必要があります。

オーディオ録音のためにもpermissionsを追加するこの How to use View.OnTouchListener instead of onClick

+0

ontouchlistenerでコードを編集しましたが、まだ動作していません – Sholi

0

代わりのOnClickあなたはOnTouch Listenerイベントを使用してACTION_DOWNに記録を開始し、ACTION_UPに停止する必要がありますを確認してください。!

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

    private MediaRecorder mRecorder = null;  

    private String mFileName = null; 



     mRecordButton.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View view, MotionEvent motionEvent) { 

        //if Button is Pressed.! or user Id Holding Button 
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
         startRecording(); 

         Toast.makeText(context, "Hold To Record.!", Toast.LENGTH_SHORT).show(); 

        } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { 

         //Do Nothing 
         stopRecording(); 

         Toast.makeText(context, "Recorded.!", Toast.LENGTH_SHORT).show(); 
        } 


        return false; 
       } 
      }); 


    private void startRecording() { 

     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     // Record to the external cache directory for visibility 
     mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 

     //getExternalCacheDir().getAbsolutePath(); 

     String id = new String(UUID.randomUUID().toString()); 

     mFileName += "/recordedAudio/" + id + ".mp3"; 
     mRecorder.setOutputFile(mFileName); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

     try { 
      mRecorder.prepare(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 

     mRecorder.start(); 

     Log.e(LOG_TAG, "Recording:Calling "); 

    } 

    private void stopRecording() { 
     mRecorder.stop(); 
     mRecorder.release(); 
     mRecorder = null; 

     Log.e(LOG_TAG, "stopRecording:Calling "); 

    } 
+0

オンボタンをクリックしますか? 、リングは正常に動作しています。マイク&書き込み用のアクセス権が追加されました。 – Sholi

+0

@Sholiは正常です。 –

+0

nah、そうではありません、アンドロイドデベロッパーサイト – Sholi

関連する問題