2016-12-27 51 views
1

我建立一個應用程序,使人們能夠相互共享應用程序。我已經能夠從這個應用程序(我顯示已安裝的應用程序,用戶可以選擇他想要發送的內容)做到這一點,但現在我想分享未安裝的apks,所以apk只是在下載文件夾或類似的東西。假設你在下載文件夾中有一個apk例如,我希望能夠通過按Share來進入我的應用程序併發送該apk。它就像任何其他份額(圖像等)。分享意圖過濾

我能夠讓我的應用程序彈出可以共享該類型文件的應用程序列表(在本例中爲.apk),就像在此圖片(下圖)

<intent-filter> 
    <action android:name="android.intent.action.SEND" /> 

    <category android:name="android.intent.category.DEFAULT" /> 

    <data android:mimeType="application/vnd.android.package-archive" /> 
</intent-filter> 

Share image list

現在的問題是:在活動標籤的

1 - 我怎麼知道該人按份額文件的文件路徑?

2 - 如果在清單上接收到意圖,如何將該文件路徑傳遞給我的應用程序?注:目標是通過按下共享(長按,然後共享 - 取決於設備)從設備上的任何文件夾共享一個apk。

預先感謝所有幫助。

+0

的'ACTION_SEND'實現是必需的,通過該協議,接受任何形式的Uri'的'(你的情況,只要它似乎指向一個APK)。這'Uri' *威力*有'file'的方案,在這種情況下'的getPath()'上'Uri'是將文件的路徑(你在哪裏得到來自'getIntent了'Uri'()。的getData ()')。但是,該'Uri'可以具有'content','http','https'等作爲方案,並且在這些情況下不存在「文件路徑」。 – CommonsWare

+0

@CommonsWare我設法使用getClipData獲取文件路徑,問題是它只能從api 16轉發。對於以前的那些,getData()總是空的,所以我真的不知道該怎麼做:(另外我試着調試並檢查Uri內部的內容,並且沒有什麼是我明顯需要的,只有當這樣做't show on debug –

+0

哎呀,對不起,我正在考慮其他操作,比如'ACTION_VIEW'。'ACTION_SEND'的'Uri',如果有的話,將會出現在'EXTRA_STREAM'中。 – CommonsWare

回答

0
分享圖片和文字代碼

抱歉回答我自己的問題,但也許這將有助於未來的人。 我正在調試,如果有什麼東西,看裏面的演員,什麼都沒有出現。 解決方案正在執行(ArrayList<Uri>) getIntent().getExtras().get("android.intent.extra.STREAM");,這將從意圖中「刷新」Extras。我不知道爲什麼這些臨時演員最初並沒有出現,只有在我得到額外的流後,它才能起作用。 我,因爲在這種情況下與send_multiple我試圖使用arraylist of uri's。如果您只使用SEND,則不需要ArrayList部件。

1

您必須已經添加了一些活動的意圖過濾器。該活動將接收您可以使用Intent intent = getIntent()方法訪問的意圖。 See this doc。這回答第2部分

在第一部分,我認爲你可以做intent.getData().getPath()

+0

問題是'getData()'返回null,我不能使用'getClipData()',因爲它需要最小api 16,我的最小值是9,我無法更改它 –

0

這是我的分享數據時,我點擊shareContentProvider 我用它

 Uri imageUri; 
     Intent intent; 

     imageUri = Uri.parse("android.resource://" + getPackageName() + "/drawable/" + "icon"); 
     intent = new Intent(); 
     intent.setAction(Intent.ACTION_SEND); 
     intent.putExtra(Intent.EXTRA_TEXT, "#periodicTable"); 
     intent.putExtra(Intent.EXTRA_STREAM, imageUri); 
     intent.setType("image/*"); 
     startActivity(intent); 
+0

但是這是來自應用程序內部..我想從應用程序外部檢測到這一點。 –

+0

http://stackoverflow.com/questions/5714224/accessing-custom-content-provider-from-different-app –

+0

你可以小雞,我真的不知道很多關於android :) –