找不到具有权限 com.scanlibrary.provider 的提供者的元数据
Posted
技术标签:
【中文标题】找不到具有权限 com.scanlibrary.provider 的提供者的元数据【英文标题】:Couldn't find meta-data for provider with authority com.scanlibrary.provider 【发布时间】:2020-05-17 17:40:00 【问题描述】:我已经在我的应用程序中导入了scanlibrary
模块。这个模块有自己的清单文件FileProvider
。
这是目录结构:
下面是我打开相机的代码,以及 Manifest 文件。
扫描库代码以打开相机并捕获图像
public final static int PICKFILE_REQUEST_CODE = 1;
public final static int START_CAMERA_REQUEST_CODE = 2;
public final static String OPEN_INTENT_PREFERENCE = "selectContent";
public final static String IMAGE_BASE_PATH_EXTRA = "ImageBasePath";
public final static int OPEN_CAMERA = 4;
public final static int OPEN_MEDIA = 5
public final static String SCANNED_RESULT = "scannedResult";
public final static String IMAGE_PATH = Environment
.getExternalStorageDirectory().getPath() + "/scanSample";
public final static String SELECTED_BITMAP = "selectedBitmap";
public void openCamera()
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File file = createImageFile();
boolean isDirectoryCreated = file.getParentFile().mkdirs();
Log.d("", "openCamera: isDirectoryCreated: " + isDirectoryCreated);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
Uri tempFileUri = FileProvider.getUriForFile(getActivity().getApplicationContext(),
"com.scanlibrary.provider", // As defined in Manifest
file);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempFileUri);
else
Uri tempFileUri = Uri.fromFile(file);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempFileUri);
startActivityForResult(cameraIntent, ScanConstants.START_CAMERA_REQUEST_CODE);
private File createImageFile()
clearTempImages();
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new
Date());
File file = new File(ScanConstants.IMAGE_PATH, "IMG_" + timeStamp +
".jpg");
fileUri = Uri.fromFile(file);
return file;
扫描库清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.scanlibrary" >
<uses-sdk android:targetSdkVersion="28" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:largeHeap="true"
android:hardwareAccelerated="true"
android:label="@string/app_name" >
<activity
android:name=".ScanActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name" >
</activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.scanlibrary.provider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
</application>
</manifest>
我的应用清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.notepad.cuecardsnotes">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.notepad.cuecardsnotes.DocScanning"></activity>
<activity
android:name="com.notepad.cuecardsnotes.MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.notepad.cuecardsnotes.AllNotes"
android:screenOrientation="portrait" />
<activity
android:name="com.notepad.cuecardsnotes.OpenNotes"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.notepad.cuecardsnotes.CreateNotes"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.notepad.cuecardsnotes.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
tools:replace="android:resource"
android:resource="@xml/filepaths" />
</provider>
</application>
</manifest>
当我运行我的应用程序时,我收到了这个错误:
java.lang.RuntimeException: Unable to start activity ComponentInfocom.notepad.cuecardsnotes/com.scanlibrary.ScanActivity: java.lang.IllegalArgumentException: Couldn't find meta-data for provider with authority com.scanlibrary.provider
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3374)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3513)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.IllegalArgumentException: Couldn't find meta-data for provider with authority com.scanlibrary.provider
at androidx.core.content.FileProvider.parsePathStrategy(FileProvider.java:606)
at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:579)
at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:417)
at com.scanlibrary.PickImageFragment.openCamera(PickImageFragment.java:121)
at com.scanlibrary.PickImageFragment.handleIntentPreference(PickImageFragment.java:77)
at com.scanlibrary.PickImageFragment.init(PickImageFragment.java:58)
at com.scanlibrary.PickImageFragment.onCreateView(PickImageFragment.java:48)
at android.app.Fragment.performCreateView(Fragment.java:2534)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1303)
at android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2431)
at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2210)
at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2166)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2067)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3057)
at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3004)
at android.app.FragmentController.dispatchActivityCreated(FragmentController.java:184)
at android.app.Activity.performCreate(Activity.java:7822)
at android.app.Activity.performCreate(Activity.java:7804)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1318)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3349)
我的设备运行的是 Android 版本 10。
是什么导致了这个错误?
【问题讨论】:
你能解决这个问题吗? 【参考方案1】:我认为您应该合并清单文件并且应该只提供一个 FIleprovider 路径。 如您的清单文件所示,您有两个不同的文件提供程序路径。
我使用过这个库,我没有导入项目,而是只添加了所需的文件,它对我来说非常好。
【讨论】:
评论不用于扩展讨论;这个对话是moved to chat。【参考方案2】:我已添加修复程序,现在问题已解决。 您收到错误的原因如下:
你必须把它改成
<com.scanlibrary.PolygonView
android:id="@+id/polygonView"
android:layout_
android:layout_
android:layout_gravity="center"
android:visibility="gone"></com.scanlibrary.PolygonView>
到
<com.reminder.testapplication.PolygonView
android:id="@+id/polygonView"
android:layout_
android:layout_
android:layout_gravity="center"
android:visibility="gone"></com.reminder.testapplication.PolygonView>
另外,我假设您了解 ndk android,因此您可能已经为您的 android studio 和机器添加了所需的 ndk 设置。如果没有,您应该首先checkout 相同的基础知识。
因此,如果正确设置了 ndk,您将能够生成 ScanActivity 类中本地方法所需的 .so 文件。
目前已经添加
ndk.dir=C\:\\Users\\Kalp007\\AppData\\Local\\Android\\Sdk\\android-ndk-r20b
在 local.properties 文件中并编译 .h 文件以生成 .so 文件..所以您的代码现在可以完美运行。 因此,您需要将本地机器路径添加到您的 ndk-bundle 中。
这是完整的项目链接
https://drive.google.com/file/d/1qMth1ahk3zXhk0CDeRlP-WiTq8zwsu3e/view?usp=sharing
谢谢
【讨论】:
嗨 Nidhi,我已经导入了您的项目并更改了 ndk 路径,但出现错误。我给你发了聊天。你能检查一下吗 这里是聊天链接地址chat.***.com/rooms/207085/…以上是关于找不到具有权限 com.scanlibrary.provider 的提供者的元数据的主要内容,如果未能解决你的问题,请参考以下文章