Android Question File provider error

andyp

Member
Licensed User
Longtime User
Hi

Using FileProvider
https://www.b4x.com/android/forum/threads/class-fileprovider-share-files.97865/#content

The example app works no problem.

I have used the code (and manifest, b4a.png file, etc) in my app.

I get this error log:

Error occurred on line: 34 (FileProvider)
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:131)
at f3azone.pro.reader.fileprovider._getfileuri(fileprovider.java:127)
at f3azone.pro.reader.loadthebox$ResumableSub_Button3_Click.resume(loadthebox.java:623)
at f3azone.pro.reader.loadthebox._button3_click(loadthebox.java:546)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:733)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:352)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:175)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:171)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
at android.view.View.performClick(View.java:6897)
at android.widget.TextView.performClick(TextView.java:12693)
at android.view.View$PerformClick.run(View.java:26100)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6942)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/f3azone.pro.reader/files/shared/b4a.png
at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:711)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400)
... 24 more

Line 34 is:
Code: Copy
Return fp.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f))

Thoughts? Thank you.....
 
If I make this change it appears to work, so the SharedFolder is the same all SdkVersions

But this does not seem right? Why does the example app work with the original code, and my app does not?

Thank you for any help!

Code: Copy
Public Sub Initialize
    Dim p As Phone
    If p.SdkVersion >= 24 Or File.ExternalWritable = False Then
        UseFileProvider = True
' add this line: 
        SharedFolder = rp.GetSafeDirDefaultExternal("shared")
' remove these two lines:
'        SharedFolder = File.Combine(File.DirInternal, "shared")
'        File.MakeDir("", SharedFolder)
    Else
        UseFileProvider = False
        SharedFolder = rp.GetSafeDirDefaultExternal("shared")
    End If
    Log($"Using FileProvider? ${UseFileProvider}"$)
End Sub
 
Upvote 0
Humm… I have checked the manifest - I think I covered everything?

Code: Copy
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases. change target 18 to 26
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136

AddManifestText(
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="26"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>
<uses-permission
  android:name="android.permission.WRITE_EXTERNAL_STORAGE"
  android:maxSdkVersion="18"  />
 <uses-feature android:name="android.hardware.location.gps"/>
  )   

SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")

AddActivityText(EmailedBox,
         <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
                <data android:scheme="file" />
                <data android:host="*" />
                <data android:port="*" />
                <data android:pathPattern=".*..*..*..*..*..*.f3a" />
                <data android:pathPattern=".*..*..*..*..*.f3a" />
                <data android:pathPattern=".*..*..*..*.f3a" />
                <data android:pathPattern=".*..*..*.f3a" />
                <data android:pathPattern=".*..*.f3a" />
                <data android:pathPattern=".*.f3a" />
            </intent-filter>
              <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
                <data android:scheme="content" />
                <data android:pathPattern=".*..*..*..*..*..*.f3a" />
                <data android:pathPattern=".*..*..*..*..*.f3a" />
                <data android:pathPattern=".*..*..*..*.f3a" />
                <data android:pathPattern=".*..*..*.f3a" />
                <data android:pathPattern=".*..*.f3a" />
                <data android:pathPattern=".*.f3a" />
            </intent-filter>
)

AddApplicationText(
<meta-data
  android:name="com.google.android.geo.API_KEY"

  android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

<provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="$PACKAGE$.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths"/>
  </provider>
)
 
SetActivityAttribute(SaveTheBox, android:windowSoftInputMode, "stateVisible")
 
CreateResource(xml, provider_paths,
   <external-files-path name="name" path="shared" />
)
 
Upvote 0
Found the problem - it was with the manifest - I missed:

Code: Copy
CreateResource(xml, provider_paths,
   <files-path name="name" path="shared" />
)

Thanks for pointing me in the right direction!!
 
Upvote 0

Similar Threads

Replies
1
Views
1K
  • Locked
  • Article Article
Replies
2
Views
8K
  • Article Article
Android Code Snippet Upload files with WebView
Replies
37
Views
44K
Back
Top