Android模拟器打开失败:ENOENT(没有这样的文件或目录)

时间:2016-10-02 16:29:55

标签: android file android-emulator storage android-permissions

我需要帮助才能在Android模拟器中保存文件...我已经添加了

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera" android:required="true" />
AndroidManifest.xml中的

我的保存文件代码:

   if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        imageView.setImageBitmap(imageBitmap);
   }

        String root = Environment.getExternalStorageDirectory().toString();


        File myDir = new File(root + "/Img");
        myDir.mkdirs();
        long n = System.currentTimeMillis();
        String fname = "IMG_" + n + ".jpeg";
        file = new File(myDir, fname);
        if (file.exists())
            file.delete();
        try {
            FileOutputStream out2 = new FileOutputStream(file);// here fire exception
            imageBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out2); 
            out2.flush();
            out2.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.denis.calculator">
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".InfoActivity"></activity><!-- ATTENTION: This was auto-generated to add Google Play services to your project for
 App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />


</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera" android:required="true" />

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

替换以下行

String root = Environment.getExternalStorageDirectory().toString();

File myDir = new File(root + "/Img");

使用

File myDir = new File(Environment.getExternalStorageDirectory(),"Img");

同时从代码中删除以下行

if (file.exists())
    file.delete();

因为您定义文件名的方式永远不会有相同的文件名。因此,验证文件的存在与此无关。

如果您的应用将用于Android 6.0或更高版本,您还必须向用户提出书面许可。有关详细信息,请参阅以下链接:

https://developer.android.com/training/permissions/requesting.html

您可以使用我最近创建此存储库的库中定义的解决方案,包括Permission演示。

https://github.com/eeshan-jamal/DroidLibX

我稍后会通过Maven提供它,但是现在你必须在项目中导入droidlibx库模块。

答案 1 :(得分:0)

解决方案从Nougat降级为KitKat!谢谢你的建议