0

Я не могу понять, как обмениваться внутренним txt-файлом. (! Не внешние) я заметил, что не possibile по умолчанию, но я writed моего ContetProvider классаAndroid java для записи файла внутренней памяти и совместного использования

< поставщик андроид: имя = "myProvider" андроида: власти = "com.mobilemerit.usbhost" андроид: экспортироваться = "истинный" />

public class myProvider extends ContentProvider { 
@Override 
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {  
    File cacheDir = getContext().getCacheDir(); 
    File privateFile = new File(cacheDir, "file.txt"); 

    return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_WRITE); 
} 

затем

try { 
      InputStream is = c.getAssets().open("file.txt"); 

      File cacheDir = c.getCacheDir(); 
      File outFile = new File(cacheDir, "file.txt"); 

      OutputStream os = new FileOutputStream(outFile.getAbsolutePath()); 


      String content = "Hello Java Code Geeks"; 
      byte[] buff = new byte[1024]; 
      int len; 
      while ((len = is.read(buff)) > 0) { 
       os.write(buff, 0, len); 
      } 

      os.flush(); 
      os.close(); 
      is.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); // TODO: should close streams properly here 
     } 


    Uri uri = Uri.parse("content://com.mobilemerit.usbhost/file.txt"); 
     InputStream is = null;   
     StringBuilder result = new StringBuilder(); 
     try { 
      is = c.getContentResolver().openInputStream(uri); 
      BufferedReader r = new BufferedReader(new InputStreamReader(is)); 
      String line; 
      while ((line = r.readLine()) != null) { 

       result.append(line); 
      }    
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { if (is != null) is.close(); } catch (IOException e) { } 
     } 

но новое намерение совместного использования, которое я пишу, связано с файлом file.txt, который невозможно отправить. Похоже, что приложение «это неверно». Что я обижаю? Я не могу использовать внешнее запоминающее устройство

Intent intent = new Intent(android.content.Intent.ACTION_SEND); 
      intent.setType("text/plain"); 
      intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://com.mobilemerit.usbhost/file.txt")); 
      startActivity(Intent.createChooser(intent, "")); 
+0

'then'. Объясните, пожалуйста, код, который будет «притворяться». – greenapps

+0

Затем он собирался вставить еще один фрагмент кода –

+0

. Вы можете найти интересную информацию в http://stackoverflow.com/questions/6072895/email-from-internal-storage, более подробно в последующих ответах, которые охватывают контент-провайдера чем в моем собственном размещении на причудах прямого файлового метода, который в первый раз пытался решить этот вопрос. –

ответ

0

Если только намерение состоит в том, чтобы разделить/по электронной почте внутренний файл, не нужно, чтобы создать контент-провайдера. Вы можете использовать метод setReadable (1), чтобы каждый процесс мог получить доступ к файлу. Пример ниже.

//open existing file 
File emailFile= new File(getFilesDir(), "sampleFile.txt"); 
//allow read for others 
emailFile.setReadable(true, false); 
Uri emailFileUri = Uri.fromFile(emailFile); 
Intent intentToEmailFile = new Intent(Intent.ACTION_SEND); 
intentToEmailFile.setType("message/rfc822"); 
intentToEmailFile.putExtra(android.content.Intent.EXTRA_STREAM, emailFileUri); 

Intent chooserIntent = Intent.createChooser(intentToEmailFile, "Send email"); 
startActivity(chooserIntent); 

Это будет правильно прикреплять внутренний файл к почтовому клиенту по вашему выбору.

+0

Хорошо. Но это не решение проблемы. Почему приложение может читать его контент-провайдера, но нет экстернальной активности? – greenapps

+0

@greenapps Я предполагал, что проблема заключалась в отправке по электронной почте внутреннего файла. Если речь идет о контент-провайдерах, отредактируйте заголовок вопроса, чтобы это отразить. – Kiran

+0

Было бы неплохо, если бы вы могли решить подход контент-провайдера. И я не ОП! – greenapps