java.lang.SecurityException:权限拒绝:从ProcessRecord打开提供程序com.android.providers.media.MediaDocumentsProvider {430b1748 29271:com.xxx/u0a88}(pid = 29271,uid = 10088)需要android.permission.MANAGE_DOCUMENTS或android. permission.MANAGE_DOCUMENTS
我已添加MANAGE_DOCUMENTS和READ_EXTERNAL_STORAGE权限,但我仍然收到此错误.违规代码:
public static String getImagePath(HailoDriverApplication app, Uri uri) {
Cursor cursor = null;
if (uri == null) {
return null;
}
try {
cursor = app.getContentResolver().query(uri, new String[] {
MediaStore.Images.Media.DATA
}, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
正如所要求的清单片段:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.x.x.x" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" /> …Run Code Online (Sandbox Code Playgroud) 我<input type="file">在android webview上使用了它.我得到了它的工作感谢这个线程:
WebView中的文件上传
但接受的答案(或任何其他)不再适用于android 4.4 kitkat webview.
有谁知道如何解决它?
它也不适用于目标18.
我看了一些android 4.4源代码,似乎WebChromeClient没有改变,但我认为setWebChromeClient不再适用于kitkat webview,或者至少不是这个openFileChooser功能.
我正在使用Android 4.4的存储访问框架并打开文件选择器.
一切正常,除非从Google云端硬盘中选择文件,我只能弄清楚如何将其作为输入流打开,但我想获得一个java File对象.
返回的内容uri看起来像这样:content://com.google.android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279
其他类似的问题,但没有一个工作解决方案,允许我获取文件名,文件大小和内容:
我还研究了Paul Burke的FileChooser(https://github.com/iPaulPro/aFileChooser),这是该问题列表中最常见的问题.
如何从该内容获取文件?
我目前的解决方法是从输入流写出一个临时文件.
谢谢!
我通过Android 5.0从图库中选择图像遇到问题.我的启动意图的代码是:
private void takePictureFromGallery()
{
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(intent, PICK_FROM_FILE);
}
Run Code Online (Sandbox Code Playgroud)
这里是请求代码PICK_FROM_FILE的onActivityResult()方法中调用的函数
private void handleGalleryResult(Intent data)
{
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
// field declaration private String mTmpGalleryPicturePath;
mTmpGalleryPicturePath = cursor.getString(columnIndex);
cursor.close();
// at this point mTmpGalleryPicturePath is null
...
}
Run Code Online (Sandbox Code Playgroud)
对于早于5.0的版本,此代码始终可以使用com.android.gallery应用程序.Google相册是Android 5.0上的默认图库应用程序.可能这个问题取决于应用程序还是新的Android操作系统分发问题?
编辑
我理解这个问题:Google相册自动浏览云服务器上备份图片的内容.事实上,如果我关闭每个互联网连接并且在选择图像之后尝试通过@maveň建议实践,则不会通过从InputStream解码Bitmap来获得结果.
所以在这一点上问题变成:android 5.0中有没有办法处理Intent.ACTION_PICK动作,以便系统浏览选择本地设备图库?
一开始,用户可以使用新的存储访问框架选择文件(假设应用程序是API> 19):
https://developer.android.com/guide/topics/providers/document-provider.html
然后通过保存URI来保存对所选文件的引用,如下所示:
content://com.android.providers.downloads.documments/document/745
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,文件来自默认下载dir`).
稍后,我想让用户打开这些文件(例如,他们的名字显示在UI列表中,用户选择一个).
我想用Android着名的意图选择器功能做到这一点,我所拥有的只是上面的URI对象......
谢谢,
android android-intent android-file storage-access-framework android-afilechooser
现在我的代码打开了默认的下载视图,它只显示我下载的PDF.我选择了一个PDF文件,我得到了这个:
内容://com.android.providers.downloads.documents/document/1171
我想得到这个:
/storage/emulated/0/Download/ch22Databases.pdf
我的问题是如何在Android中执行此操作?
我的代码:
public void PDF() {
PDF = (Button) findViewById(R.id.FindPDFBtn);//Finds the button in design and put it into a button variable.
PDF.setOnClickListener(//Listens for a button click.
new View.OnClickListener() {//Creates a new click listener.
@Override
public void onClick(View v) {//does what ever code is in here when the button is clicked
Intent intent = new Intent();
intent.setType("application/pdf");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select a PDF "), SELECT_PDF);
}
}
);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) …Run Code Online (Sandbox Code Playgroud) 当我从图库中选择一个图像以在Android应用程序中的我的imageview上设置它时,我发现它被反转180或270或90度.
所以为了检查/解决这个我使用的EXIF方向,但它总是给我"0".
我无法得到什么问题.
码:
Uri selectedImageUri = data.getData();
absolutePath = selectedImageUri.getPath();
exifMedia = new ExifInterface(absolutePath);
String exifOrint = exifMedia.getAttribute(ExifInterface.TAG_ORIENTATION);
exifOrientation = Integer.parseInt(exifOrint);
System.out.println("Orientation Tag is:"+exifOrientation);
/** Convert URI into byte */
ContentResolver cr = getBaseContext()
.getContentResolver();
InputStream inputStream = cr
.openInputStream(selectedImageUri);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
rotatedBMP = getResizedBitmapImage(
bitmap, 100, 100,exifOrientation);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100,
stream);
byteArray = stream.toByteArray();
mimProfileImageBrowse.setImageBitmap(rotatedBMP);
Run Code Online (Sandbox Code Playgroud)
方法:
public Bitmap getResizedBitmapImage(Bitmap bm, int newHeight, int newWidth, int exifOrientation) {
int …Run Code Online (Sandbox Code Playgroud) 我编写了一个Android应用程序,使用DownloadManager将示例PDF文件下载到下载目录.这是代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vertretungsplan);
Button dlbutton = (Button) findViewById(R.id.buttondownload);
final Context c = this;
dlbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(myurl));
request.setTitle("Vertretungsplan");
request.setDescription("wird heruntergeladen");
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
String filename = URLUtil.guessFileName(myurl, null, MimeTypeMap.getFileExtensionFromUrl(myurl));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
DownloadManager manager = (DownloadManager) c.getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在,我尝试在我的Xperia Z3 Android 6.0上从Android Studio调试运行它.当我点击下载按钮时,会发生以下错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.markwitt.schul_app, PID: 29297
java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/hrpsampletable.pdf: Neither user 10047 nor current …Run Code Online (Sandbox Code Playgroud) xml android android-manifest android-permissions android-download-manager
我正在尝试在我的应用程序中实现一个功能,用户可以从他们的相机胶卷中选择一张图片,并且应用程序将解码图像中的QR码.
我目前正在使用react-native-camera-roll-picker:https://github.com/jeanpan/react-native-camera-roll-picker 和react-native-qrcode-local-image:https:// github的.com/remobile /反应天然-QRCode的局部图像
问题是本地QR码图像库要求我传递本地路径,并且与react-native-camera-roll-picker提供的本机uri不兼容.我会使用另一个库来解码图像QR码但这个似乎是唯一适用于iOS和Android并从现有图像而不是从实际相机扫描的图像.
我也尝试实现react-native-fetch-blob以便在本地暂时保存相机胶卷图像,但这也给我带来了麻烦:https://github.com/wkh237/react-native-fetch-blob
这是我目前在一个函数中的尝试,我在react-native-camera-roll-picker的"回调"道具中调用(以前的尝试被注释掉了):
_pickedImage(array,currentImg) {
console.log(currentImg)
var path = RNFS.DocumentDirectoryPath + '/pickedqr';
let rnfbURI = RNFetchBlob.wrap(RNFetchBlob.fs.asset(currentImg.uri))
const Blob = RNFetchBlob.polyfill.Blob
Blob.build(rnfbURI, {type:'image/jpg'}).then((b) => {
tmpBlob = b;
RNFetchBlob.fs.readFile(tmpBlob, 'base64').then((data) => {
console.log("Base64", data)
QRDecoder.decode(`data:image/gif;base64,${data}`, (error, result)=>{
console.log("Code", result)
console.log("Error", error)
});
});
})
/*fullPath = currentImg.uri.replace("assets-library://", "cdvfile://localhost/assets-library/")
QRDecoder.decode(fullPath, (error, result)=>{
console.log("Code", result)
console.log("Error", error)
});*/
/*let blb = Blob.build( rnfbURI, { type: 'image/jpg'})
console.log(blb)*/
/*RNFetchBlob.fs.readFile(rnfbURI, 'base64').then((data) => { …Run Code Online (Sandbox Code Playgroud) 文件uri是已知的,例如
`file:///mnt/sdcard/Download/AppSearch_2213333_60.apk`
Run Code Online (Sandbox Code Playgroud)
我想检查这个文件是否可以在后台打开,怎么办?
android ×9
android-file ×1
bitmap ×1
cordova ×1
exif ×1
html ×1
java ×1
javascript ×1
path ×1
pdf ×1
qr-code ×1
react-native ×1
uri ×1
webview ×1
xml ×1