2012-05-28 33 views
23

我的應用程序通過TCP連接發送的文件(所有MIME類型),所以我想我的應用程序出現在Android共享菜單。最佳實踐 - 將您的應用程序到Android共享菜單

我增加了以下意圖過濾到我的活動在AndroidManifest.xml

<intent-filter ><!--intent filter for single file sharing--> 
    <action android:name="android.intent.action.SEND" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="*/*" /> 
</intent-filter> 
<intent-filter ><!--intent filter for sharing multiple files--> 
    <action android:name="android.intent.action.SEND_MULTIPLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="*/*" /> 
</intent-filter> 

現在,我已將此添加到Activity這是要在點擊共享動作

Intent intent = getIntent(); 
if (Intent.ACTION_SEND.equals(intent.getAction())) 
{ 
Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); 
if (uri != null) { 
    fileset = new HashSet(); 
    fileset.add(getPathfromUri(uri)); 
    } 
} 
else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) 
{ 
ArrayList<Uri> uris= intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); 
if (uris != null) { 
     fileset = new HashSet(); 
     for(Uri uri : uris)       
      { 
      fileset.add(getPathfromUri(uri)); 
      } 
     } 
} 

我用這個方法啓動生成要共享的文件的絕對路徑。

public String getPathfromUri(Uri uri) { 
if(uri.toString().startsWith("file://")) 
     return uri.getPath(); 
String[] projection = { MediaStore.Images.Media.DATA }; 
Cursor cursor = managedQuery(uri, projection, null, null, null); 
startManagingCursor(cursor); 
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
cursor.moveToFirst(); 
String path= cursor.getString(column_index); 
//cursor.close(); 
return path; 
} 

上述方法準確取回,我已經錯過了或者是有這樣做的更好的辦法圖像/視頻和其他files.Is有什麼的絕對路徑?

除了Share菜單裏,有我的電話一個Send Via菜單。 screenshot

有沒有辦法讓我的應用程序進入這個列表?

+2

據我所知,只有一個 「共享」 菜單。該列表可能是自定義的,因爲我希望Facebook,G +,Twitter會顯示在該列表中,否則如果您安裝了這些列表。 –

+0

我也這麼認爲,列表中的那些是ROM隨附的默認應用程序。這一定是三星已經加入:)感謝澄清 – coderplus

+0

你試過嗎? intent.setType( 「*/*」); – jzafrilla

回答

0

我試圖解決這個問題,我敢肯定,三星的畫廊使用了一些自定義操作通過菜單共享。考慮到列出的所有應用程序都是預裝的應用程序,顯然三星與所有列出的應用程序開發人員一致同意使用其自定義意向操作。

我也試圖聯繫三星,他們尚未答覆。

0

我在這裏列出它是如何在菜單中得到:讓您的MIME類型/

http://blog.blundellapps.com/add-your-app-to-the-android-menu/

基本上它是:

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

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

      <data android:mimeType="*/*" /> 
     </intent-filter> 

如果你做到這一點,它不」 T顯示了,這意味着他們使用的是意圖菜單,這是一個自定義的共享列表,所以你也不能強迫你到底。

+0

鏈接轉到釣魚網站 –

+0

已修復,舊域名 – Blundell

2

我認爲你是從應用程序外部共享圖像。 plz在intentfiler中定義minetype。它在我的一邊工作正常。

<activity 
      android:name=".SharePhotoFromOutSide" 
      android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" /> 

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

       <data android:mimeType="photo/*" /> 
      </intent-filter> 
     </activity> 
+0

我認爲您的過濾器與我的過濾器相同,除了mimeType.Mine顯示所有文件類型的共享菜單。我原來的問題中的菜單是一個自定義的三星菜單,我不認爲只有修改Manifest才能進入它。 mimeType'photo/*'存在嗎?如果我只是想分享圖像,我會用'image/*' - http://en.wikipedia.org/wiki/Internet_media_type – coderplus

+0

*/*定義了所有類型的文件,但是您可以將照片/ *用於分享應用外部的照片。它在我的一邊很好地工作。 –

相關問題