2013-07-19 20 views
5

Creo il file nella memoria interna come suggerito dai documenti android. Per essere precisi, il file viene creato in una directory specifica nella memoria interna. Lo faccio usando la modalità world_readable. Poi più tardi cerco di allegare il file utilizzando il programma di posta elettronica. Sono stato in grado di ottenere il file allegato, tuttavia l'invio della mail non è riuscito (non sembra essere per caricare il file) sono sicuro che sia memoria interna/permesso thingy.Invia e-mail con allegato dalla memoria interna

Qualcuno sa come risolverlo o un esempio di lavoro? Farà schifo per convertire tutto su una memoria esterna.

Grazie

Ps: ho controllato altri thread e non sembrano avere soluzioni (vecchie discussioni)

+0

http: // stackoverflow.it/questions/587917/trying-to-attach-a-file-from-sd-card-to-email – KOTIOS

+0

è possibile vedere il file all'e-mail? – user1140237

+0

@ Stacks28. Il problema è che sto attaccando dalla memoria interna. SD non mi aiuta – Snake

risposta

4

sto assumendo si sta tentando di inviare il file come allegato e-mail utilizzando gli intent.

Il motivo per cui il file è vuoto è che l'applicazione di posta elettronica non ha accesso al file in/data/data/nome_pacchetto/myfile_name, a causa di modello di sicurezza androidi (i dati/directory/data/nome_pacchetto è privato per la tua app).

Per aggiungere il file come allegato, è necessario scriverlo nella memoria pubblica (ad esempio la scheda SD) in modo che l'app di posta elettronica possa accedervi.

+0

Quindi nessun modo posso farlo dall'archiviazione interna anche se ho impostato la modalità leggibile in tutto il mondo – Snake

+0

nope buddy .... – KOTIOS

+0

@Snake È possibile utilizzare anche la memoria interna, usando Provider. Leggi la risposta data qui http://stackoverflow.com/questions/13482310/how-to-share-internal-storage-file-with-gmail-client –

0

Io ho la soluzione su questo dopo 4 giorni, Si prega di notare i seguenti punti mentre dando percorso file di classe in Android (Java):

1) Utilizzare il percorso per il percorso String storage interno = "/ stoccaggio/sdcard0/miofile.txt "; 2) path = "/ storage/sdcard1/myfile.txt"; 3) menzionare le autorizzazioni nel file Manifest.

4) Controllare prima la lunghezza del file per conferma. 5) Controlla i percorsi in ES File Explorer per quanto riguarda sdcard0 & sdcard1 è lo stesso oppure ...

ad es. nella memoria del telefono Android è anche la memoria esterna

File file = nuovo File (percorso); long = file.length(); // in byte

6

È possibile condividere un file dall'archivio locale delle app a un'altra applicazione (come un allegato di posta elettronica) concedendo autorizzazioni temporanee per leggere tale file come parte della condivisione intento.

Passaggio 1: Aggiungere un provider di file sul AndroidManifest.xml:

<applicaton> 
    .... 
    <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="com.your.package.name.fileprovider" 
     android:grantUriPermissions="true" 
     android:exported="false"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/filepaths" /> 
    </provider> 
</application> 

Fase 2: Aggiungi un res di file/xml/filepaths.xml con il percorso del file nella memoria applicazione locale che si desidera per condividere:

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <files-path name="myFolder" path="Folder/"/> 
</paths> 

Fase 3: Nel codice Java creare il file sharing intento:

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE); 
    shareIntent.setType("text/plain"); 
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Your subject"); 
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Your message"); 

    ArrayList<Uri> uris = new ArrayList<Uri>(); 
    String shareName = new String(pathToFile + filename); 
    File shareFile = new File(shareName); 
    Uri contentUri = FileProvider.getUriForFile(context, "com.your.package.name.fileprovider", shareFile); 
    uris.add(contentUri); 
    shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 

    // Grant temporary read permission to the content URI 
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

    String msgStr = "Share..."; 
    startActivity(Intent.createChooser(shareIntent, msgStr)); 

Se y Per eventuali problemi, consultare i documenti qui https://developer.android.com/training/secure-file-sharing/share-file.html per ulteriori dettagli.