그림을 외부 저장소에 저장하려고했으나이 파일은 존재하지 않습니다. rescanned SD, changed getExternalStorageDirectory (이 예제에서는 간단한 drawable resourse를 사용합니다)그림 파일이 SD로 저장되지 않습니다
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
코드가있다 : getExternalStoragePublicDirectory 에 그냥 작동하지 않습니다
...
) 나는 모든 권한이
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new DrawView(this));
}
class DrawView extends View {
Paint paint;
Bitmap bitmap;
public DrawView(Context context) {
super(context);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(40);
Bitmap bmpIcon = BitmapFactory.decodeResource(getResources(), R.drawable.launcher);
bmpIcon = Bitmap.createScaledBitmap(bmpIcon, 500, 500, true);
bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bmpIcon, 0,0, paint);
canvas.drawText("Saved bitmap", 100, 50, paint);
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "savedBitmap.png");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} finally {
if (fos != null) fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawARGB(80, 102, 204, 255);
canvas.drawBitmap(bitmap, 100, 100, paint);
}
}
}
"권한이 있습니다"- READ_INTERNAL_STORAGE 권한이없고 WRITE_INTERNAL_STORAGE 권한이 없습니다. MediaStore를 업데이트하는 코드가 없습니다 (예 :'MediaScannerConnection.scanFile()'). 그 외에도 LogCat에서 스택 추적을 얻고 있습니까? "이 파일이 존재하지 않는다"고 어떻게 결정합니까? – CommonsWare
이것은 자습서이며 단계별로 시도했습니다. READ_INTERNAL_STORAGE 및 WRITE_INTERNAL_STORAGE는 위의 예에 있습니다. 팁 MediaScannerConnection.scanFile() – Alisa
"READ_INTERNAL_STORAGE 및 WRITE_INTERNAL_STORAGE가 위의 예에 존재합니다"에 대한 답변을 주신 데, - [해당 권한이 Android에 존재하지 않으므로] 더 나은 예제를 사용하십시오 (https://developer.android.com/). reference/android/Manifest.permission.html). – CommonsWare