Android Question [Solved] How copy files to root with Storage.OpenOutputStream?

Watchkido1

Active Member
Licensed User
Longtime User
Hallo Forum

Ich möchte 12x .html-Dateien an eine App namens „ andFlmsg “ übergeben . (Es wandelt TXT/HTML-Dateien in PSK31-Signale um. )
Diese App hat einen Dateiordner: „/storage/emulates/0/NBEMS.files/Outbox“
Das Erstellen der Datei funktioniert, aber wie bekomme ich die Daten hinein?
oder: Wie bekomme ich die Dateien da rein?
Kennt jemand einen einfacheren Weg?
Die App sollte nicht im „Google Play Store“ sein
Ich habe Folgendes versucht:

.txt to root:
#AdditionalJar: androidx.legacy:legacy-support-core-utils

Sub Process_Globals
    Privater Speicher als externer Speicher
    Private OrdnerAls Liste stapeln
    Privates UpItem als ExternalFile
End Sub

Sub-Globals
    Private chkUsePreviouslySelected As CheckBox
    Private ListView1 als ListView
    'Private ImageView1 As ImageView
    Private lblPath As Label
    Private Label1 As Label
    Private Button1 As Button
End Sub




Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        Storage.Initialize (Me, "Storage")
        FoldersStack.Initialize
        UpItem.Initialize
    End If
    Activity.LoadLayout("Speicherzugriff")
  
    Label1.Text = $"Für die Datenübergabe von KatGen an andFlmsg
    müssen beide Apps den Ordner "NBEMS.files" verwenden.
    So gehen sie vor:
    1. Klicken Sie auf "Ordner suchen",
    2. Suchen Sie den Ordner "NBEMS.files"
    3. Klicken Sie auf den Ordner "NBEMS.files"
    4. Klicken Sie Unten auf "diesen Ordner verwenden"
    5. Klicken Sie auf "Zugriff zulassen""$
  
  
  
End Sub



Sub btnPickFolder_Click
    Storage.SelectDir(chkUsePreviouslySelected.Checked)
    Wait For Storage_ExternalFolderAvailable
    FoldersStack.Clear
    EnterFolder(Storage.Root)
    Log(EnterFolder(Storage.Root))
  
  
End Sub


Private Sub EnterFolder (folder As ExternalFile)
    FoldersStack.Add(folder)
    Dim sb As StringBuilder
    sb.Initialize
    For Each f As ExternalFile In FoldersStack
        If f = Storage.Root Then
            sb.Append("Root")
        Else
            sb.Append(" / ").Append(f.Name)
        End If
    Next
    lblPath.Text = sb.ToString
    ListView1.Clear

      
    If FoldersStack.Size > 1 Then
        ListView1.AddSingleLine2("..", UpItem)
    End If
    For Each f As ExternalFile In Storage.ListFiles(folder)
        If f.IsFolder Then
            ListView1.AddSingleLine2($"[${f.Name}]"$, f)
        Else
            ListView1.AddSingleLine2(f.Name, f)
        End If
    Next
  

  
End Sub

Private Sub ListView1_ItemClick (Position As Int, Value As Object)
    Dim f As ExternalFile = Value
    If f = UpItem Then
        'Entfernen Sie den aktuellen Ordner
        FoldersStack.RemoveAt(FoldersStack.Size - 1)
        'Holen Sie sich den übergeordneten Ordner, der jetzt der oberste Ordner is
        Dim folder As ExternalFile = GetCurrentFolder
        'Entfernen Sie es und geben Sie es erneut ein.“
        FoldersStack.RemoveAt(FoldersStack.Size - 1)
        EnterFolder(folder)
      
      
        Dim rnd1 As String
        rnd1 = Rnd(1,100)&".txt"
        wait for(Storage.CreateNewFile(Storage.Root , rnd1)) Complete (Success As Boolean)
        LogColor("datei copiert: " & Success,Colors.Magenta)
      
    Else
        If f.IsFolder Then
            EnterFolder(f)
          
        '------------------------------------------------------- 
          
      '      Dim html As String = "<html><body><h2><bold><font color = green>Version 1</font></bold></h2></body></html>"
            Wait For (File.CopyAsync(File.DirAssets, "01version.html", Storage.Root, "01version.html")) Complete (Success As Boolean)
            LogColor("datei copiert: " & Success,Colors.Magenta)
      '      Dim b() As Byte = html.GetBytes("UTF8")
      '      Dim in As InputStream
      '      in.InitializeFromBytesArray(b, 0, b.Length)
      '      Wait For (Storage.OpenOutputStream(FileHandler1.SaveAs(in, "text/plain", "01version.html")) Complete (Success As Boolean)
      ' LogColor("datei Kopiert: " & Success,Colors.Magenta)
          
      ' Dim b() As Byte = html.GetBytes("utf8")
       ' Ausblenden als OutputStream = Storage.OpenOutputStream(b)
       ' out.Write(b, 0, b.Length)
       ' out.Close
        '---------------------------------------------------------------- ----- 
      
Ende wenn
    Ende wenn
End Sub

Private Sub GetCurrentFolder As ExternalFile
    Return FoldersStack.Get(FoldersStack.Size - 1) 'holt das letzte Element
End Sub



Unteraktivität_Lebenslauf

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub





Private Sub Button1_Click
    'ExternalStorage.SelectDir
Sub
beenden
 
Last edited:

Erel

B4X founder
Staff member
Licensed User
Longtime User
The app should not be in the "Google Play store"
You can set the targetSdkVersion to 29 and use requestLegacyExternalStorage

You should then have full access after you get the runtime storage permission.
 
Upvote 0
Top