Android 拍照存储问题,求解答

weixin_37655384 2017-04-05 09:37:20
AndroidManifest.xml
已经添加权限
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.lenovo.myapplication.Camera.fileprovder"
android:enabled="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
>
</provider>

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-feature android:name="android.hardware.camera" />


public class Camera extends AppCompatActivity {
private ImageButton Camera;
private ImageView Picture;
private Uri ImageUri;
private static final int Take_photo_action=1;
private static final String TAG="Camera_activity";
private static String storagePath="";
private static final String DST_FOLDER_NAME = "Came";
public static File filePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.carmera_notification_activity);
Picture= (ImageView) findViewById(R.id.picture);
Camera= (ImageButton) findViewById(R.id.camera_button);


Camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isExternalStorageWritable()){
intiPath();
String path=filePath.getPath();
Log.e(TAG,path);
if(Build.VERSION.SDK_INT>=24){
ImageUri=FileProvider.getUriForFile(Camera.getContext(),"com.example.lenovo.myapplication.Camera.fileprovder",filePath);
}else {
ImageUri=Uri.fromFile(filePath);

}

Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");//启动拍照意图
intent.putExtra(MediaStore.EXTRA_OUTPUT,ImageUri);//传递数据
startActivityForResult(intent,Take_photo_action);
}else {
Toast.makeText(Camera.getContext(),"不可写入",Toast.LENGTH_SHORT).show();
}

}
});
}


private static String intiPath(){
if(storagePath.equals("")){
storagePath=Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+DST_FOLDER_NAME;
filePath=new File(storagePath);
if(!filePath.exists()){
filePath.mkdir();
}
}
return storagePath;
}

public static void BitmapSave(Bitmap b){
String path=intiPath();
long getTime=System.currentTimeMillis();
String imageName=path+"/"+getTime+".jpg";
Log.i(TAG,"save name"+imageName);
try{
FileOutputStream out=new FileOutputStream(imageName);
BufferedOutputStream os=new BufferedOutputStream(out);
b.compress(Bitmap.CompressFormat.JPEG,100,os);
os.flush();
os.close();
}catch (IOException e){
e.printStackTrace();
Log.i(TAG, "saveBitmap:失败");
}

}
public static boolean isExternalStorageWritable(){
String state=Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)){
return true;
}
return false;
}

protected void onActivityResult(int resquestCode,int resultCode,Intent data){
super.onActivityResult(resquestCode,resultCode,data);
switch (resquestCode){
case Take_photo_action:
if(resultCode==RESULT_OK){//判断为回调成功时候
try {

Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(ImageUri));//利用Bitmap的BitmapFactory解码getContentResolver获取图片数据打开输入流openInputStream
Picture.setImageBitmap(bitmap);//设置图片显示
BitmapSave(bitmap);

}catch (FileNotFoundException e){
e.printStackTrace();
}
}
break;
default:
break;
}
;
}
}

然后报错出现无法写入, java.io.IOException: open failed: EACCES (Permission denied)
部分代码参考《第一行代码》第二版,并在此基础上进行个人修改。
求解答
...全文
165 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jason Zhang~ 2017-04-05
  • 打赏
  • 举报
回复
在写文件前,先要判断文件以及文件夹目录是否存在,不存在的话,都要创建好先,才能去执行写文件操作的
开发者_android 2017-04-05
  • 打赏
  • 举报
回复
先确定保存的目录与你设置的目录是否一致且存在。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧