Android Code Snippet VideoRecordApp with FileProvider

Discussion in 'Code Snippets' started by Erel, Jan 8, 2019.

Thread Status:
Not open for further replies.
  1. Erel

    Erel Administrator Staff Member Licensed User

    Requires Audio library v1.70+: https://www.b4x.com/android/forum/threads/updates-to-internal-libraries.59340/#post-635852

    Based on FileProvider example and class: Sharing files from your app with File Provider

    Code:
    video.Initialize("video"'video is a process global VideoRecordApp variable.
    Dim folder As String = Starter.Provider.SharedFolder
    Dim FileName As String = "1.mp4"
    video.Record3(folder, FileName, -
    1, Starter.Provider.GetFileUri(File.Combine(folder, FileName)))
    Wait For Video_RecordComplete (Success As Boolean)
    If Success Then
       
    'Example of playing the recorded video
       Dim in As Intent
       
    in.Initialize(in.ACTION_VIEW, "")
       Starter.Provider.SetFileUriAsIntentData(
    in, FileName)
       
    in.SetType("video/*")
       
    StartActivity(in)
    End If
     
  2. Eldad Onojetah

    Eldad Onojetah Member Licensed User

    I have tried this for video.Record3(...) and it fails.
    What I have done:

    1. In my Manifest
    Code:
    AddApplicationText(
      <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>
    )

    CreateResource(xml, provider_paths,
       <external-files-
    path name="name" path="shared" /> 
    )
    2. I have FileProvider v1.0 added to the project
    3. In Starter,
    Code:
    Provider.Initialze
    4. Using your sample code provided above
    Code:
    Dim folder As String = Starter.Provider.SharedFolder
    Dim FileName As String = "1.mp4"
    'videoRecorder initialised elsewhere
    videoRecorder.Record3(folder, FileName, -1, Starter.Provider.GetFileUri(File.Combine(folder, FileName)))
    I get the following error:
    Code:
    ** Activity (main) Pause, UserClosed = false **
    ** 
    Activity (homeactivity) Create, isFirst = true **
    ** 
    Activity (homeactivity) Resume **
    geolocationmanager started
    *** 
    Service (httputils2service) Create ***
    ** 
    Service (httputils2service) Start **
    FusedLocationProvider1_ConnectionSuccess
    (
    LocationLocation[fused 65.966700,-18.533300 acc=4 et=+40m22s373ms alt=15.04444408 {Bundle[mParcelledData.dataSize=52]}]
    FusedLocationProvider1_LocationChanged
    [GeoCodeInfo=(MyMap) {address_components=[{long_name=13, short_name=13, types=[street_number]}, {long_name=Sunnubraut, short_name=Sunnubraut, types=[route]}, {long_name=Dalvík, short_name=Dalvík, types=[locality, political]}, {long_name=Iceland, short_name=IS, types=[country, political]}], formatted_address=Sunnubraut 13, Dalvík, Iceland, geometry={location={lat=65.9678782, lng=-18.5373444}, location_type=ROOFTOP, viewport={northeast={lat=65.96922718029151, lng=-18.5359954197085}, southwest={lat=65.9665292197085, lng=-18.5386933802915}}}, place_id=ChIJsa_AHMi-0kgRn6RJ1HlXnVQ, plus_code={compound_code=XF97+53 Dalvik, Iceland, global_code=9CQ3XF97+53}, types=[street_address]}, IsInitialized=false, Latitude=65.9667
    , Location=Sunnubraut 13, Dalvík, Iceland, LocationOk=true, Longitude=-18.5333
    ]
    registerdevice -> {
      "id": "yt97d0",
      "success": true
    }
    ** Activity (homeactivity) Pause, UserClosed = false **
    ** Activity (sendreportactivity) Create, isFirst = true **
    ** Activity (sendreportactivity) Resume **
    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 java.lang.reflect.Method.invoke(Native Method)
        at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
        at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
        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$2.run(BA.java:370)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
    Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.ohiritech.app/files/shared/data/user/0/com.ohiritech.app/files/shared/1.mp4
        at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:739)
        at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:418)
        ... 16 more
    I have also tried
    Code:
    ...
    videoRecorder.Record3(folder, FileName, -
    1, Starter.Provider.GetFileUri(folder, FileName))
    The error is similar.

    I currently use this same code for recording audio and using the file Chooser and it works file.
     
  3. Erel

    Erel Administrator Staff Member Licensed User

    Please start a new thread for this.
     
Thread Status:
Not open for further replies.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice