2012-11-28 13 views
1

當使用「使用-SDK」我創建一個應用程序來記錄語音保存文件的SD卡,當我試圖存儲在SD卡文件,無法在清單

<uses-sdk android:minSdkVersion="8" 

它給我的錯誤「不這樣的文件或目錄「,但是當我從清單註釋掉」uses-sdk「部分時,它工作正常。我不確定實際的問題是什麼,但似乎是由於在清單中設置sdk-version。 我也嘗試增加/減少minSdkVersion,但仍然是相同的錯誤。

下面是錯誤日誌。

11-28 15:53:54.887: W/System.err(5935): java.io.FileNotFoundException: /mnt/sdcard/Recorder/voicemail.3gp (No such file or directory) 
11-28 15:53:54.897: W/System.err(5935):  at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
11-28 15:53:54.897: W/System.err(5935):  at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232) 
11-28 15:53:54.897: W/System.err(5935):  at java.io.FileOutputStream.<init>(FileOutputStream.java:94) 
11-28 15:53:54.897: W/System.err(5935):  at java.io.FileOutputStream.<init>(FileOutputStream.java:165) 
11-28 15:53:54.897: W/System.err(5935):  at java.io.FileOutputStream.<init>(FileOutputStream.java:144) 
11-28 15:53:54.897: W/System.err(5935):  at android.media.MediaRecorder.prepare(MediaRecorder.java:540) 
11-28 15:53:54.897: W/System.err(5935):  at com.abc.SendVoiceMailFragment.startRecording(SendVoiceMailFragment.java:96) 
11-28 15:53:54.897: W/System.err(5935):  at com.abc.SendVoiceMailFragment.access$0(SendVoiceMailFragment.java:84) 
11-28 15:53:54.897: W/System.err(5935):  at com.abc.SendVoiceMailFragment$3.onClick(SendVoiceMailFragment.java:59) 
11-28 15:53:54.897: W/System.err(5935):  at android.view.View.performClick(View.java:2532) 
11-28 15:53:54.897: W/System.err(5935):  at android.view.View$PerformClick.run(View.java:9293) 
11-28 15:53:54.897: W/System.err(5935):  at android.os.Handler.handleCallback(Handler.java:587) 
11-28 15:53:54.897: W/System.err(5935):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-28 15:53:54.897: W/System.err(5935):  at android.os.Looper.loop(Looper.java:150) 
11-28 15:53:54.897: W/System.err(5935):  at android.app.ActivityThread.main(ActivityThread.java:4277) 
11-28 15:53:54.897: W/System.err(5935):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 15:53:54.897: W/System.err(5935):  at java.lang.reflect.Method.invoke(Method.java:507) 
11-28 15:53:54.897: W/System.err(5935):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-28 15:53:54.897: W/System.err(5935):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-28 15:53:54.897: W/System.err(5935):  at dalvik.system.NativeStart.main(Native Method) 

編輯 這裏是我的清單文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.abc" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > 
    </uses-permission> 
    <uses-permission 
     android:name="android.permission.INTERNET" 
     android:protectionLevel="normal" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.USE_CREDENTIALS" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.CAMERA" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.SEND_SMS" > 
    </uses-permission> 
    <uses-permission android:name="android.permission.RECORD_AUDIO" > 
    </uses-permission> 
    <uses-permission android:name="androd.permission.WRITE_EXTERNAL_STORAGE" /> 

    <supports-screens 
     android:anyDensity="true" 
     android:largeScreens="false" 
     android:normalScreens="true" 
     android:smallScreens="true" /> 

    <application 
     android:debuggable="true" 
     android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:theme="@style/tab_name" > 
     <activity 
      android:name=".SplashScreen" 
      android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application>  
</manifest> 

我的代碼來創建文件

private String getFilename(){ 
     String filepath = Environment.getExternalStorageDirectory().getPath(); 
     File file = new File(filepath,AUDIO_RECORDER_FOLDER); 

     if(!file.exists()){ 
      file.mkdirs(); 
     } 

     return (file.getAbsolutePath() + "/" + AUDIO_FILE_NAME + ".3gp"); 
    } 
+0

發表您的AndroidManifest.xml –

+0

@imrankhan剛剛做到了。普萊舍看看 – abhishek

回答

0

您在清單正在做的事情做的正確的方法是:

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> <!-- You need a target 

而且這部分應該來的<uses-sdk>標籤後:

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

仍然是同一個問題。 – abhishek

+0

我不明白爲什麼它設置sdkVersion後給權限拒絕錯誤。 – abhishek

+2

@abhishek - 外部存儲許可在第一Android SDK中不存在,所以分析早日(或不指定)SDK版本建立了一個包時,自動由後續設備添加。 –

0

你已經創建了你是storring文件的文件夾? (使用mkdirs()

+0

是我創建的文件夾,那麼請上面的代碼我剛纔添加它在那邊。 – abhishek