2016-02-27 40 views
0

我跟着一個視頻教程來編寫此代碼。我得到一個java.lang.RuntimeException: setAudioSource failed錯誤,導致Unable to start activityMediaRecorder setAudioSource失敗 - 應用程序崩潰(可能由於CM13)

我正在調試的第一代Moto G與Cyanogenmod 13安裝。 我的假設是我的自定義ROM與MediaRecorder有衝突。任何想法將不勝感激!

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

我還要提到的是我正確的權限在AndroidManifest

import android.media.MediaPlayer; 
    import android.media.MediaRecorder; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.Toast; 

    import java.io.IOException; 

    public class MainActivity extends AppCompatActivity { 

    MediaRecorder myAudioRecorder; 
    private String outputFile = null; 
    private Button start, stop, play; 

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

     start = (Button) findViewById(R.id.button1); 
     stop = (Button) findViewById(R.id.button2); 
     play = (Button) findViewById(R.id.button3); 

     stop.setEnabled(false); 
     play.setEnabled(false); 
     outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myrec.3pg"; 

     myAudioRecorder = new MediaRecorder(); 
     myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
     myAudioRecorder.setOutputFile(outputFile); 

    } 

    public void start(View v) { 
     try { 
      myAudioRecorder.prepare(); 
      myAudioRecorder.start(); 
     } catch(IllegalStateException e) { 
      e.printStackTrace(); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 

     start.setEnabled(false); 
     stop.setEnabled(true); 

     Toast.makeText(this, "Recording Started", Toast.LENGTH_SHORT).show(); 
    } 

    public void stop(View v) { 
     myAudioRecorder.stop(); 
     myAudioRecorder.release(); 
     myAudioRecorder = null; 
     stop.setEnabled(false); 
     play.setEnabled(true); 
     Toast.makeText(this, "Audio recorded successfully", Toast.LENGTH_SHORT).show(); 
    } 

    public void play(View v) throws IOException { 
     MediaPlayer m = new MediaPlayer(); 
     m.setDataSource(outputFile); 
     m.prepare(); 
     m.start(); 
     Toast.makeText(this, "Playing Audio", Toast.LENGTH_SHORT).show(); 
    } 

UI/XML編輯器

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.m4db0x.freestylerapdisorder.MainActivity" 
    tools:showIn="@layout/activity_main"> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="32dp" 
     android:text="@string/recording_title" 
     android:textAppearance="?android:attr/textAppearanceMedium"/> 

    <ImageView 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_below="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="37dp" 
     android:scaleType="fitXY" 
     android:src="@android:drawable/presence_audio_online"/> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView1" 
     android:layout_marginTop="67dp" 
     android:onClick="start" 
     android:text="@string/start" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@id/button1" 
     android:layout_below="@id/button1" 
     android:layout_alignRight="@id/textView1" 
     android:layout_marginTop="40dp" 
     android:onClick="stop" 
     android:text="@string/stop" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/button2" 
     android:layout_marginTop="30dp" 
     android:layout_centerHorizontal="true" 
     android:onClick="play" 
     android:text="@string/play" /> 

</RelativeLayout> 

回答

5

可能爲時已晚,但希望這將是有益的對於某人...

試着改變您的設備 設置>隱私和安全>應用程序權限。

嘗試在那裏給予必要的許可。設備中給出的權限比代碼中的排名高。

這幫了我。

+0

這並沒有立即解決我的問題。但我取得了進展。 – mccbala

相關問題