Articles of android fileprovider

如何使FileProvider可用于其他应用程序?

有没有可能有一个FileProvider可用于其他应用程序? 的manifest.xml … <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.myapp.fileprovider" android:exported="true" android:grantUriPermissions="false" android:permission="com.example.filesvisible.permission.READ" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filespath" /> </provider> … 从文档 : false:提供程序不适用于其他应用程序。 设置android:exported =“false”来限制对提供者访问你的应用程序。 只有具有与提供者相同的用户ID(UID)的应用程序才能访问它。 我试图设置导出为true,但我得到了这个exceptionUnable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported为什么我不能导出FileProvider?

在Android中使用存储访问框架保存文件

我将文档访问框架与我的云存储访问应用程序集成在一起。 使用这个文档,我已经能够访问该文件并检索它(我只是使用Gmail应用程序的附加function来检查这个)。 我现在试图find如何使用相同的方法保存文件(直接通过应用程序保存文件到云存储),我做了以下更改: 对于getRoots调用, row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE); 我也重写了createDocument方法。 我没有看到很多关于如何做到这一点的示例代码或文档。 我也看到,像“照片”应用程序的一堆应用程序有“共享”button,使用不同的方法(日志显示miniShareActivity),我的应用程序不显示在那(它看起来像它使用不同的文件共享机制) 我正在寻找信息 如何使用SAF来存储文件(任何示例文件将是伟大的或指向文档)。 我假设它将允许用户使用select器界面导航到文件夹并存储文件。 如何让应用程序显示在应用程序的“Minishare活动”列表中,以将文件导入到应用程序中(看起来它不提供select器界面,但我仍然希望提供支持,以便将文件保存到一个默认的位置)

在Android Nougat拍摄照片后,BitmapFactory无法解码来自Uri的位图

我试图拍照,然后使用照片。 这是我做的。 我的设备是Nexus 6P(Android 7.1.1) 。 首先,我创build了一个Uri : Uri mPicPath = UriUtil.fromFile(this, UriUtil.createTmpFileForPic()); //Uri mPicPath = UriUtil.fromFile(this, UriUtil.createFileForPic()); 然后,我开始Intent : Intent intent = ActivityUtils.getTakePicIntent(mPicPath); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, RequestCode.TAKE_PIC); } 最后,我在onActivityResult上处理了这个Uri : if (requestCode == RequestCode.TAKE_PIC) { if (resultCode == RESULT_OK && mPicPath != null) { Bitmap requireBitmap = BitmapFactory.decodeFile(mPicPath.getPath()); //path is like […]

使用FileProvider在Android N上打开下载的文件

由于FileProvider的变化,我必须修复Android N的应用程序。 我已经基本阅读了最后一个关于这个话题的所有内容,但没有find解决scheme为我工作。 这里是我们之前的代码,它从我们的应用程序开始下载,将它们存储在Download文件夹中,并像DownloadManager告诉他已完成下载一样调用ACTION_VIEW意图: BroadcastReceiver onComplete = new BroadcastReceiver() { public void onReceive(Context ctxt, Intent intent) { Log.d(TAG, "Download commplete"); // Check for our download long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (mDownloadReference == referenceId) { DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById(mDownloadReference); Cursor c = mDownloadManager.query(query); if (c.moveToFirst()) { int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS); if (DownloadManager.STATUS_SUCCESSFUL == […]

图像共享意图适用于Gmail,但崩溃FB和Twitter

我试图让用户分享一个图像到设备上的其他应用程序。 该图像位于我的应用内部存储区的文件/子目录中。 它适用于Gmail,但在回应我的意图时,Facebook和Twitter都崩溃了。 编辑:Google+也正常工作。 这里是代码的相关部分。 在Application.xml中 <provider android:name="android.support.v4.content.FileProvider" android:authorities="org.iforce2d.myapp.MyActivity" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> XML / filepaths.xml <paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="shared" path="shared"/> </paths> 以下是我的活动中的分享代码: File imagePath = new File(getContext().getFilesDir(), "shared"); File newFile = new File(imagePath, "snapshot.jpg"); Uri contentUri = FileProvider.getUriForFile(getContext(), "org.iforce2d.myapp.MyActivity", newFile); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); List<ResolveInfo> […]

使用FileProvider从图库中选取图像文件

为Android N编译我遇到了FileProvider的问题。 我需要让用户从图库中挑选图片/用相机拍照,然后裁剪到正方形。 我已经设法实现了一个FileProvider用相机拍摄图像,但是我从图库中挑选图像存在严重的问题。 问题是在画廊有很多来自不同地方的文件,我有例外的例外: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/6133-3766/DCIM/100ANDRO/DSC_0035.JPG 所以问题是,我可以通过file_paths.xml来访问/storage/任何地方。 我不能依赖确切的path,因为有可能来自WhatsApp和类似的应用程序的图片,例如WhatsApp图像得到这个path: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20160821-WA0000.jpg 我已经设法解决空path: <external-path name="external_storage" path=""/> 根据文档类似于Environment.getExternalStorageDirectory() 。 但仍然无法弄清楚如何处理存储在/storage/SOME_DIR/ 。 请帮忙。

FileProvider在GetUriForFile上抛出exception

我遵循FileProviders上的Android开发人员参考上的示例代码,但它不会工作。 我已经在我的Manifest中的文件提供者定义中设置了pathfiles/exports/ ,并且引用的文件确实存在于该path中。 在我的清单: <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.company.app.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> 并在xml/file_paths.xml <?xml version="1.0" encoding="UTF-8" ?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="exports" path="exports/"/> </paths> 然后我尝试使用以下代码获取内容 – uri: Java.IO.File exportFile = new Java.IO.File ("/data/data/com.company.app/files/exports/file.pdf"); Android.Net.Uri exportUri = Android.Support.V4.Content.FileProvider.GetUriForFile (this, "com.company.app.fileprovider", exportFile); 但是我得到这个错误: Exception of type 'Java.Lang.NullPointerException' was thrown. at Android.Runtime.JNIEnv.CallStaticObjectMethod (IntPtr jclass, IntPtr jmethod, Android.Runtime.JValue[] […]

Android:FileProvider IllegalArgumentException无法find包含/data/data/**/files/Videos/final.mp4的configuration根目录

我正在尝试使用FileProvider从私有path播放video java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/XXXXX(Package)/files/Videos/final.mp4 码: <paths> <files-path path="my_docs" name="Videos/" /> </paths> Java代码: File imagePath = new File(getFilesDir(), "Videos"); File newFile = new File(imagePath, "final.mp4"); Log.d(TAG, "————-newFile:"+newFile.exists());//True here //Exception in below line Uri contentUri = FileProvider.getUriForFile(this,"com.wow.fileprovider", newFile); 的Manifest.xml <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.wow.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> 任何线索呢? 谢谢尼茨

Android – 文件提供者 – 权限拒绝

我有两个应用程序:app1和app2。 App2有: <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.android.provider.ImageSharing" android:exported="false" android:grantUriPermissions="true" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/paths" /> </provider> paths.xml: <paths> <files-path name="my_images" path="images/"/> </paths> App2从App1的“活动”中接收请求以获取图像的URI。 一旦确定URI,App2 Activity将执行以下操作: Intent intent = new Intent(); intent.setDataAndType(contentUri, getContentResolver().getType(contentUri)); int uid = Binder.getCallingUid(); String callingPackage = getPackageManager().getNameForUid(uid); getApplicationContext().grantUriPermission(callingPackage, contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); setResult(Activity.RESULT_OK, intent); finish(); 从App2收到结果后,App1执行以下操作: Uri imageUri = data.getData(); if(imageUri != null) { ImageView iv = […]

Android安装apk与Intent.VIEW_ACTION不能使用文件提供程序

我的应用程序有一个自动更新function,下载一个APK,当下载完成后,一个Intent.VIEW_ACTION打开应用程序,让用户安装下载的apk Uri uri = Uri.parse("file://" + destination); Intent install = new Intent(Intent.ACTION_VIEW); install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); install.setDataAndType(uri, manager.getMimeTypeForDownloadedFile(downloadId)); activity.startActivity(install); 这对于所有的设备<24是很好的 现在Android 24显然我们不能再开始使用file:///的意图了,在Google之后,build议使用文件提供程序 新代码: Intent install = new Intent(Intent.ACTION_VIEW); install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); install.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri apkUri = FileProvider.getUriForFile(AutoUpdate.this, BuildConfig.APPLICATION_ID + ".provider", file); install.setDataAndType(apkUri, manager.getMimeTypeForDownloadedFile(downloadId)); activity.startActivity(install); 现在activity.startActivity(安装); 抛出一个错误 找不到处理意图的活动{act = android.intent.action.VIEW dat = content://com.xxxx.xx.provider/MyFolder/Download/MyApkFile.apk typ = application / vnd.android.package-archive flg = 0x4000000} 有没有什么办法可以在Android […]