java - Android 从位图到文件对象

标签 java android bitmap

我有位图对象,我想将其转换为文件对象,为此我有以下代码: (图像是Bitmap对象)

FileOutputStream out = null;
                try {
                    out = new FileOutputStream(Environment.getDataDirectory().toString()+"/"+"test.png");
                    image.compress(Bitmap.CompressFormat.PNG, 100, out); 

                } catch (Exception e) {
                    Log.d ("info", “ERROR 1");
                    e.printStackTrace();
                } finally {
                    try {
                        if (out != null) {
                            out.close();
                        }
                    } catch (IOException e) {

                        Log.d ("info", “ERROR 2");
                        e.printStackTrace();
                    }
                }

我的 list 文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.alessio.myapplication">

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

    <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>
    </application>

</manifest>

但我收到此错误:

10:57:27.573 29888-29888/com.example.alessio.myapplication W/System.err: java.io.FileNotFoundException: /data/test.png: open failed: EACCES (Permission denied)
08-20 10:57:27.573 29888-29888/com.example.alessio.myapplication W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:452)
08-20 10:57:27.573 29888-29888/com.example.alessio.myapplication W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
08-20 10:57:27.573 29888-29888/com.example.alessio.myapplication W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
08-20 10:57:27.573 29888-29888/com.example.alessio.myapplication W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:116)

我想将文件对象保存在内部存储中,但我不明白,因为我收到此错误。

你能帮我吗?

最佳答案

不要使用Environment.getDataDirectory()

如果“内部存储”是指 what the Android SDK refers to as internal storage ,使用 getFilesDir(),在 Context 上调用,例如您的 Activity

如果“内部存储”是指用户所说的“内部存储”,但 the Android SDK refers to as external storage ,使用 getExternalFilesDir()(也在 Context 上)或 Environment.getExternalStoragePublicDirectory()

关于java - Android 从位图到文件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39063542/

相关文章:

java - 我应该在哪个 android SDK API 中开发应用程序,以便它适用于所有版本的 android?

android - AndroidX前后DialogPreference的区别

java - "java -version"在命令提示符下不工作

java - 如何将 JTextField 中的值保存为变量中的不可编辑值?

android - Robolectric 自定义影子代码

安卓 Intent ACTION_IMAGE_CAPTURE

android - BitmapFactory 从可绘制对象和文件返回位图的不同大小

android - 维护动态壁纸渲染器的单个实例

java - 结合 ANTLR 和代码文件

java - describeLoadBalancers 不显示经典负载均衡器