2017-10-16 71 views
-1

現在,我正在製作一個移動應用程序來捕獲音頻並將其保存在數據庫中,但我的代碼中有一個錯誤。我不知道如何解決它。當我運行該程序,它會顯示:如何在Android Studio中解決(錯誤:不支持的類型'uses-permission')?

錯誤:不支持的類型「使用許可權」

而且下面是我在AndroidManifest.xml代碼和錯誤來自這裏:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.lenovo.androidaudiocapture" > 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.STORAGE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <activity 
     android:name="com.example.lenovo.androidaudiocapture.MainActivity" 
     android:label="@string/app_name" > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 

</application> 
</manifest> 

的activity_main.xml中的文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
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" 
tools:context="com.example.lenovo.androidaudiocapture.MainActivity"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/abc"/> 
<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Record" 
    android:id="@+id/button" 
    android:layout_below="@+id/imageView" 
    android:layout_alignParentLeft="true" 
    android:layout_marginTop="37dp" 
    /> 
<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="STOP" 
    android:id="@+id/button2" 
    android:layout_alignTop="@+id/button" 
    android:layout_centerHorizontal="true" 
    /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Play" 
    android:id="@+id/button3" 
    android:layout_alignTop="@+id/button2" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="STOP PLAYING RECORDING " 
    android:id="@+id/button4" 
    android:layout_below="@+id/button2" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="10dp" 
    /> 
</RelativeLayout> 

的strings.xml中:

<resources> 
    <string name="app_name">Android Audio Capture</string> 
</resources> 

,最後,該MainActivity.java:

package com.example.lenovo.androidaudiocapture; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.media.MediaPlayer; 
import android.media.MediaRecorder; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 
import java.io.IOException; 
import java.util.Random; 
import static android.Manifest.permission.RECORD_AUDIO; 
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; 
import android.support.v4.app.ActivityCompat; 
import android.content.pm.PackageManager; 
import android.support.v4.content.ContextCompat; 

public class MainActivity extends AppCompatActivity { 

Button buttonStart, buttonStop, buttonPlayLastRecordAudio, 
     buttonStopPlayingRecording ; 
String AudioSavePathInDevice = null; 
MediaRecorder mediaRecorder ; 
Random random ; 
String RandomAudioFileName = "ABCDEFGHIJKLMNOP"; 
public static final int RequestPermissionCode = 1; 
MediaPlayer mediaPlayer ; 

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

    buttonStart = (Button) findViewById(R.id.button); 
    buttonStop = (Button) findViewById(R.id.button2); 
    buttonPlayLastRecordAudio = (Button) findViewById(R.id.button3); 
    buttonStopPlayingRecording = (Button)findViewById(R.id.button4); 
    buttonStop.setEnabled(false); 
    buttonPlayLastRecordAudio.setEnabled(false); 
    buttonStopPlayingRecording.setEnabled(false); 
    random = new Random(); 
    buttonStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(checkPermission()) { 
       AudioSavePathInDevice = 


    Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + 
            CreateRandomAudioFileName(5) + 
"AudioRecording.3gp"; 
        MediaRecorderReady(); 
        try { 
         mediaRecorder.prepare(); 
         mediaRecorder.start(); 
        } catch (IllegalStateException e) { 
// TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
// TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       buttonStart.setEnabled(false); 
       buttonStop.setEnabled(true); 
       Toast.makeText(MainActivity.this, "Recording started", 
         Toast.LENGTH_LONG).show(); 
      } else { 
       requestPermission(); 
      } 
     } 
    }); 
    buttonStop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mediaRecorder.stop(); 
      buttonStop.setEnabled(false); 
      buttonPlayLastRecordAudio.setEnabled(true); 
      buttonStart.setEnabled(true); 
      buttonStopPlayingRecording.setEnabled(false); 
      Toast.makeText(MainActivity.this, "Recording Completed", 
        Toast.LENGTH_LONG).show(); 
     } 
    }); 

    buttonPlayLastRecordAudio.setOnClickListener(new View.OnClickListener() 
{ 
     @Override 
     public void onClick(View view) throws IllegalArgumentException, 
       SecurityException, IllegalStateException { 
      buttonStop.setEnabled(false); 
      buttonStart.setEnabled(false); 
      buttonStopPlayingRecording.setEnabled(true); 
      mediaPlayer = new MediaPlayer(); 
      try { 
       mediaPlayer.setDataSource(AudioSavePathInDevice); 
       mediaPlayer.prepare(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mediaPlayer.start(); 
      Toast.makeText(MainActivity.this, "Recording Playing", 
        Toast.LENGTH_LONG).show(); 
     } 
    }); 

    buttonStopPlayingRecording.setOnClickListener(new View.OnClickListener() 
{ 
     @Override 
     public void onClick(View view) { 
      buttonStop.setEnabled(false); 
      buttonStart.setEnabled(true); 
      buttonStopPlayingRecording.setEnabled(false); 
      buttonPlayLastRecordAudio.setEnabled(true); 
      if(mediaPlayer != null){ 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
       MediaRecorderReady(); 
      } 
     } 
    }); 
} 
public void MediaRecorderReady(){ 
    mediaRecorder=new MediaRecorder(); 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
    mediaRecorder.setOutputFile(AudioSavePathInDevice); 
} 

public String CreateRandomAudioFileName(int string){ 
    StringBuilder stringBuilder = new StringBuilder(string); 
    int i = 0 ; 
    while(i < string) { 
     stringBuilder.append(RandomAudioFileName. 
       charAt(random.nextInt(RandomAudioFileName.length()))); 
     i++ ; 
    } 
    return stringBuilder.toString(); 
} 
private void requestPermission() { 
    ActivityCompat.requestPermissions(MainActivity.this, new 
      String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, 
RequestPermissionCode); 
} 
@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] 
grantResults) { 
    switch (requestCode) { 
     case RequestPermissionCode: 

      if (grantResults.length> 0) { 
       boolean StoragePermission = grantResults[0] == 
         PackageManager.PERMISSION_GRANTED; 
       boolean RecordPermission = grantResults[1] == 
         PackageManager.PERMISSION_GRANTED; 
       if (StoragePermission && RecordPermission) { 
        Toast.makeText(MainActivity.this, "Permission Granted", 
          Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(MainActivity.this,"Permission 
Denied",Toast.LENGTH_LONG).show(); 
       } 
      } 
      break; 
    } 
} 
public boolean checkPermission() { 
    int result = ContextCompat.checkSelfPermission(getApplicationContext(), 
      WRITE_EXTERNAL_STORAGE); 
    int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), 
      RECORD_AUDIO); 
    return result == PackageManager.PERMISSION_GRANTED && 
      result1 == PackageManager.PERMISSION_GRANTED; 
    } 
} 

我希望能得到答覆陽性。

謝謝。

+2

刪除佈局,strings.xml中和不相關的Java代碼。現在有太多的代碼 – Zoe

+1

@Zoe當他在清單文件中添加權限時,他的清單文件中輸入錯誤 –

+3

@NileshRathod我知道。這就是爲什麼我要求OP刪除不相關的代碼。 (我不打算這樣做,因爲我不想被懷疑爲破壞行爲)。重點是刪除不相關的代碼,以便此後可用於標記具有相同問題的其他潛在帖子。如果代碼太多,很難將帖子標記爲重複的 – Zoe

回答

0

there is typing mistake in your manifest file while you are adding permission in manifest file

你應該使用這個

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

,而不是這個

<uses-permission android:name="android.permission.STORAGE" /> 
0

以下權限不存在(它會導致你的錯誤):

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

使用這個來代替:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

我已經按照你的說法改變了它,但它仍然是錯誤的,同樣的錯誤 – Anna

相關問題