mirror of
https://github.com/apache/cordova-plugin-camera.git
synced 2025-04-10 10:09:33 +08:00
86 lines
2.3 KiB
Java
86 lines
2.3 KiB
Java
package org.apache.cordova.camera;
|
|
|
|
import android.net.Uri;
|
|
import android.os.Build;
|
|
import android.os.Environment;
|
|
import android.support.v4.content.FileProvider;
|
|
|
|
import java.io.File;
|
|
|
|
/*
|
|
* This class exists because Andorid FilesProvider doesn't work on Android 4.4.4 and below and throws
|
|
* weird errors. I'm not sure why writing to shared cache directories is somehow verboten, but it is
|
|
* and this error is irritating for a Compatibility library to have.
|
|
*
|
|
*/
|
|
|
|
public class CordovaUri {
|
|
|
|
private Uri androidUri;
|
|
private String fileName;
|
|
private Uri fileUri;
|
|
|
|
/*
|
|
* We always expect a FileProvider string to be passed in for the file that we create
|
|
*
|
|
*/
|
|
CordovaUri (Uri inputUri)
|
|
{
|
|
//Determine whether the file is a content or file URI
|
|
if(inputUri.getScheme().equals("content"))
|
|
{
|
|
androidUri = inputUri;
|
|
fileName = getFileNameFromUri(androidUri);
|
|
fileUri = Uri.parse("file://" + fileName);
|
|
}
|
|
else
|
|
{
|
|
fileUri = inputUri;
|
|
fileName = FileHelper.stripFileProtocol(inputUri.toString());
|
|
}
|
|
}
|
|
|
|
public Uri getFileUri()
|
|
{
|
|
return fileUri;
|
|
}
|
|
|
|
public String getFilePath()
|
|
{
|
|
return fileName;
|
|
}
|
|
|
|
/*
|
|
* This only gets called by takePicture
|
|
*/
|
|
|
|
public Uri getCorrectUri()
|
|
{
|
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
|
|
return androidUri;
|
|
else
|
|
return fileUri;
|
|
}
|
|
|
|
/*
|
|
* This is dirty, but it does the job.
|
|
*
|
|
* Since the FilesProvider doesn't really provide you a way of getting a URL from the file,
|
|
* and since we actually need the Camera to create the file for us most of the time, we don't
|
|
* actually write the file, just generate the location based on a timestamp, we need to get it
|
|
* back from the Intent.
|
|
*
|
|
* However, the FilesProvider preserves the path, so we can at least write to it from here, since
|
|
* we own the context in this case.
|
|
*/
|
|
|
|
private String getFileNameFromUri(Uri uri) {
|
|
String fullUri = uri.toString();
|
|
String partial_path = fullUri.split("external_files")[1];
|
|
File external_storage = Environment.getExternalStorageDirectory();
|
|
String path = external_storage.getAbsolutePath() + partial_path;
|
|
return path;
|
|
|
|
}
|
|
}
|