要在运行时请求权限,请使用此函数来检查上面和下面的版本 23
public boolean isPermissionGrantedForStorage() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else {
//permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
确保您的 Activity 实现OnRequestPermissionResult
现在回调将是
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
//resume tasks needing this permission
}
}
更重要的是,您没有向 FileOutputStream 写入任何内容。不写怎么能期望存储图像!
理想情况下应该是这样
ByteArrayOutputStream bytearrayoutputstream;
File file;
FileOutputStream fileoutputstream;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bytearrayoutputstream = new ByteArrayOutputStream();
// you code to access image and other logic ...
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
bitmap.compress(Bitmap.CompressFormat.PNG, 60, bytearrayoutputstream);
file = new File( Environment.getExternalStorageDirectory() + "/SampleImage.png");
try
{
file.createNewFile();
fileoutputstream = new FileOutputStream(file);
fileoutputstream.write(bytearrayoutputstream.toByteArray());
fileoutputstream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
随着<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />