2017-02-20 20 views
0

Хорошо, я немного пережил это, и я не получаю его. ни одна из предложений в нескольких ссылках не решила проблему., используя намерение по электронной почте

Я успешно настроил приложение для отправки файлов. В настоящее время я пытаюсь открыть файлы с моим приложением.

Моя активность открывается, когда я нажимаю на файл в полученном письме.

Что мне нужно для этого, это сохранить файл локально во внешней папке хранилища, используемой моим приложением.

Итак, когда вы нажимаете на файл, и фильтр намерений открывает правильную активность, что вы делаете рядом с доступом к этому файлу?

Намерение фильтр:

<intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="*/*" /> 
      <data android:pathPattern=".*\\.gmgt" /> 
     </intent-filter> 

активность:

public class ActFileReceiver extends Activity { 

private TextView label; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_file_receiver); 

    label = (TextView) findViewById(R.id.lblFileRecieverText); 


} 

}

намерение использовать для отправки файла:

public void emailFile(File file) { 
    Uri fileURI = Uri.fromFile(file); 
    Intent mailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    mailIntent.setType("messsage/vnd.com.boardmonkey.TABLETop.gamefile"); 
    mailIntent.putExtra(Intent.EXTRA_SUBJECT, "TABLETop game file: " + file.getName()); 
    mailIntent.putExtra(Intent.EXTRA_STREAM, fileURI); 
    startActivity(Intent.createChooser(mailIntent, "Send Mail With...")); 
} 
+0

«У меня нет образца кода» - обязательно. У вас есть действие, и у вас есть '<намерение-фильтр>', в соответствии с вашим вопросом.Информация о том, что делать, зависит от того, для чего предназначен ваш '' ('ACTION_VIEW'?' ACTION_SEND'? Что-то еще?). Итак, дайте нам это, по крайней мере. – CommonsWare

+0

справедливо, не думал, что глубоко, мое плохое. отредактировано, чтобы отразить то, что у меня действительно есть. –

+0

action_sendto работает отлично, мое приложение успешно отправит файлы через любое приложение, способное отправлять сообщения на устройстве. –

ответ

0

Вы хотите поддержать ACTION_VIEW. Если вы посмотрите на the documentation for ACTION_VIEW, вы найдете:

Вход: getData() - это URI, из которого извлекаются данные.

Здесь «ввод» относится к данным, отправленным от того, кто звонил startActivity(), к которому вы выбрали. И методы, указанные в документации по действиям Intent, относятся к самому Intent.

Так, вызов getIntent() для получения Intent, который был использован для создания вашей деятельности, и вызвать getData() на нем, чтобы получить Uri к содержанию, что вы должны смотреть.


Теперь вы начинаете сталкиваться с проблемами. В частности, вы пытаетесь использовать android:pathPattern. У вас есть два вопроса:

  1. You cannot use android:pathPattern without also specifying android:scheme and android:host.

  2. Это 2017, и несколько вещей больше используют расширения файлов. В частности, большинство контента разделяется с помощью значений Uri с схемами content, а contentUri вряд ли будет иметь расширение файла.

только пол-эффективный способ использовать android:pathPattern, чтобы ограничить себя в file схему (через android:scheme), то жить с тем, что ваше приложение будет взаимодействовать с постоянно уменьшающимся количеством приложений в течение долгого времени.

+0

ладно, это то, чего я отсутствовал !! моему приложению не нужно взаимодействовать с другими приложениями, это набор наборов, которым нужно только обмениваться файлами с самим собой, выходные файлы, такие как текстовые или смс-документы, будут отформатированы отдельно по своему усмотрению, то есть если имя файла должно быть поделившись через facebook, имя будет вытащено в строку из файла и отправлено в виде текста. так, схема и хост: мой файл является сериализованным файлом с объекта, созданного моим приложением, так что это означает, что это просто схема: файл? и я буду искать «хост», но я предполагаю, что это источник файла, например, электронная почта или веб-сайт, правильно? –

+0

@JohnHaines: «моему приложению не нужно взаимодействовать с другими приложениями» - да, это так. На данный момент ваше приложение рекламирует, что * любое приложение может попросить его просмотреть содержимое. Если это не то, что вы хотите, вам понадобится другой подход. – CommonsWare

+0

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