Android 为摄像头foto-Can'创建Uri;找不到文件
我在Android应用程序中使用相机,我想保存完整尺寸的foto,而不仅仅是位图。我按照文档实现了它Android 为摄像头foto-Can'创建Uri;找不到文件,android,android-camera,Android,Android Camera,我在Android应用程序中使用相机,我想保存完整尺寸的foto,而不仅仅是位图。我按照文档实现了它 public class CameraUtil { public static Uri takePhotoIntent(Activity activity) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File photoFile = null; try
public class CameraUtil {
public static Uri takePhotoIntent(Activity activity) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File photoFile = null;
try {
photoFile = createImageFile(activity);
} catch (IOException ex) {
// Error occurred while creating the File
}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
photoURI);
activity.startActivityForResult(intent,
REQUEST_CAMERA);
return photoURI;
}
return null;
}
public static File createImageFile(Context context) throws IOException {
String timeStamp =
new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
String imageFileName = "IMG_" + timeStamp + "_";
File storageDir =
context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
return image;
}
}
我通过以下方式在我的活动中实施它:
public class MyActivity extends AppCompatActivity
{
private Uri photoUri;
// On button click open camera
@Override
public void onClick(View view) {
photoUri = CameraUtil.takePhotoIntent(this);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
{
if (requestCode == CameraUtils.REQUEST_CAMERA)
{
File file = new File(photoUri.getPath());
// This returns false
Log.i("Files", "Exists file: " + file.exists());
}
}
}
}
GenericFileProvider:
public class GenericFileProvider extends FileProvider {}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application
...
<provider
android:name=".GenericFileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
</application>
</manifest>
首先看一看photoUri.toString()。File File=new File(photoUri.getPath())
。那是行不通的。改用photoFile
。那是你的文件。@blackapps,但是有没有办法从Uri获取它?photoUri.getPath().replace(“/external\u files/”,“/storage/emulated/0/”;
<paths>
<external-path name="external_files" path="."/>
</paths>