German Datei an PC senden

Heinz

Active Member
Licensed User
Longtime User
Hallo, ich möchte eine Datei, die meine App erstellt hat, an den PC senden.
Ich habe jetzt was gefunden, komme aber irgendwie nicht ganz klar damit, bzw.
was ich ändern muß. Kann mir da jemand helfen ?
Sub zum Senden:
Private Sub Button2_Click
    DateTime.DateFormat = "MM_yyyy"
    Datei2 = DateTime.Date(DateTime.Now) & ".csv"  ' liegt in File.DirInternal
    Dim txw As TextWriter
    'txw.Initialize2(File.OpenOutput(Starter.Provider.SharedFolder, csvnev,False),"Windows-1250")
    txw.Initialize2(File.OpenOutput(Starter.Provider.SharedFolder, csvnev,False),"utf8")
    txw.Write(sb.ToString)
    txw.Close
    Dim phone As Phone
    Dim in As Intent
    If phone.SdkVersion >= 24 Then
        in.Initialize(in.ACTION_SEND, "")
        in.SetType("text/plain")
        in.PutExtra("android.intent.extra.STREAM", Starter.Provider.GetFileUri(File.Combine(Starter.Provider.SharedFolder,csvnev)))
        in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    Else
        in.Initialize(in.ACTION_SEND, "file://" & File.Combine(Starter.Provider.SharedFolder, csvnev))
        in.SetType("text/plain")
    End If
End Sub

Ich habe das jetz mal so ersetzt :

neuer code:
Private Sub Button2_Click
    DateTime.DateFormat = "MM_yyyy"
    Datei2 = DateTime.Date(DateTime.Now) & ".csv"  ' liegt in File.DirInternal
    Dim txw As TextWriter
    'txw.Initialize2(File.OpenOutput(Starter.Provider.SharedFolder, csvnev,False),"Windows-1250")
    txw.Initialize2(File.OpenOutput(File.DirInternal, Datei2, False),"utf8")
    txw.Write(sb.ToString)
    txw.Close
    Dim phone As Phone
    Dim in As Intent
    If phone.SdkVersion >= 24 Then
        in.Initialize(in.ACTION_SEND, "")
        in.SetType("text/plain")
        in.PutExtra("android.intent.extra.STREAM", Starter.Provider.GetFileUri(File.Combine(File.DirInternal, Datei2)))
        in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    Else
        in.Initialize(in.ACTION_SEND, "file://" & File.Combine(File.DirInternal, Datei2))
        in.SetType("text/plain")
    End If
End Sub

Jetzt weiß ich nicht was die Variable sb bedeutet und es gibt noch einen Fehler bei in.PutExtra(....)
Was muß ich da bei Starter.Provider einsetzen ? Oder muß in der Manifest was geändert werden ?
Main - 68: Unbekanntes Mitglied: provider
Main - 61: Undeklarierte Variable wird verwendet, bevor ihr ein Wert zugewiesen wurde.

Die Manifest-Datei habe ich so ergänzt :

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,
<root-path name="root" path="." />
)
Sowas würde mir genügen. Bluetooth kann ich ja auf beiden Seiten zuerst
einschalten.
 
Last edited:

GMan

Well-Known Member
Licensed User
Longtime User
sb müsste der Stringbuilder sein.
Das Wort Provider im Manifest ist mE nicht gültig
 

b4x-de

Active Member
Licensed User
Longtime User
Meines Erachtens braucht man für den von dir angepassten Codeausschnitt keinen FileProvider. Das Manifest muss deshalb nicht erweitert werden. Bitte kopieren einmal die Zeilen 61 und 68 hier in den Thread. Aus dem Codeschnipsel ist nicht erkennbar, was die richtigen Zeilennummern sind.
 

Heinz

Active Member
Licensed User
Longtime User
zeilen:
txw.Write(sb.ToString)
in.PutExtra("android.intent.extra.STREAM", Starter.Provider.GetFileUri(File.Combine(File.DirInternal, Datei2)))

bei Zeile 61 ist es sb.ToString -> danke GMan. Stringbuilder war es (Fehler jetzt weg)
bei Zeile 68 ist es Starter.Provider.GetFileUri(....)

Da Provider auch im Manifest auftaucht, dachte ich daß es damit zu tun hätte.
Hängt jetzt nur noch an Zeile 68.
 

b4x-de

Active Member
Licensed User
Longtime User
Ich kann leider gerade nicht auf die B4X Dokumentation zuhreifen. Aber gibt es nicht auch bei XUI ein GetFileURI()? Dann braucht man den Provider nicht mehr.
 

b4x-de

Active Member
Licensed User
Longtime User
Versuche bitte zu ergänzen:
B4X:
Dim x as XUI
Dim u As String
u = x.FileUri(File.DirInternal, Datei2)
Und in Zeile 68 dann anstelle von Starter.Provider.GetFileUri(....) einfach u
Geht das?

Schau auch mal hier:
 

Heinz

Active Member
Licensed User
Longtime User
Meinst du so ? Die Datei2 ist ja vorher dann schon zugewiesen. :
zeile:
in.PutExtra("android.intent.extra.STREAM", u)
Das geht ohne Fehler.
Probier ich mal heute mittag, ob es denn auch auf dem Handy läuft.
 

b4x-de

Active Member
Licensed User
Longtime User
Ja, so habe ich es gemeint. Ich hoffe, das klappt und ich habe mich richtig erinnert. Momentan habe ich keinen Computer zur Hand, um es selbst auszuprobieren.
 

Heinz

Active Member
Licensed User
Longtime User
Habe es jetzt probiert. Da passiert nichts. Der MyPhoneExplorer kann auch nicht per BT verbinden und meldet, daß
er den Bluetooth-Stack nicht gefunden hat. Ich hatte mir vor einiger Zeit noch extra einen BT-Usb - Stick mit
Version 4 gekauft, da ich nur einen uralten Stick hatte.

Ich habe deshalb mal im Forum nachgeschaut und heraus gefunden, daß USB auch eine Alternative wäre.
Man muß ja nur einmal die Entwickleroptionen und dann das USB-Debugging aktivieren.
In Erels Example ExternalStorage steckt ja nicht soviel drin. Das ganze Ordner-Zeugs brauche ich ja nicht,
da meine Datei ja bereits bekannt ist.

Wie sähe es denn codemäßig damit aus ?

Wlan möchte ich nur als allerletzte Option verwenden. Da brauche ich ja nochmals ein Programm auf dem PC.
 

b4x-de

Active Member
Licensed User
Longtime User
Hmm... Was bedeutet "Habe es jetzt probiert. Da passiert nichts." Es ist wirklich notwendig, dass wir hier mehr Informationen bekommen, wenn du Hilfe haben möchtest: 1. Wo passiert nichts? 2. Was war das erwartete Verhalten? 3. Was ist stattdessen passiert? 4. Welche Schritte haben vorher funktioniert und ab wann hat es nicht mehr geklappt (optional)?

Bei den Alternativen muss ich passen. Schau Mal nach, ob du einen FTP-Server auf dem Handy zum laufen bekommst.
 

Heinz

Active Member
Licensed User
Longtime User
Da scheint schon das connecten über BT nicht zu funktionieren.
Handy + PC sind zwar gekoppelt, werden aber nicht verbunden.
Deshalb wäre mir jetzt lieber, das ganze über USB zu machen.
Erstens hat nicht jeder etwas ältere PC BT, zweitens kann es auch
dort zu Verbindungsproblemen kommen. Und USB hat mittlerweile
jeder PC . Da hätte ich weniger Probleme, egal an welchem PC ich
gerade die Datei runterladen will.
 
Top