2017-02-20 87 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

任何應用程序都可以查看這些文件。他們不能對他們做任何事情,因爲他們是序列化的對象。如果有人想寫一個解釋該對象的應用程序,那就不會打擾我。我只想讓我的應用程序在本地保存文件。 –

相關問題