2012-05-28 4 views
23

내 앱이 TCP 연결을 통해 파일 (모든 MIME 유형)을 전송하므로 내 앱이 Android 공유 메뉴에 표시되기를 원합니다. 모범 사례 - Android 공유 메뉴에 앱 추가

나는 이제 공유 작업

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)); 
      } 
     } 
} 

나는이 방법을 사용을 클릭에 출시 될 수있는 Activity이 추가

<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> 

AndroidManifest.xml 내 활동에 다음 인 텐트 필터를 추가 공유 할 파일의 절대 경로를 생성합니다.

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

AFAIK에는 "공유"메뉴 만 있습니다. Facebook, G +, Twitter가 그렇지 않으면 그 목록에 나타나기를 기대하기 때문에 그 목록은 사용자 정의 일 수 있습니다. –

+0

나는 목록에있는 것들이 ROM과 함께 제공되는 기본 응용 프로그램이기 때문에 나는 그렇게 생각한다. 그게 삼성이 추가 한 것임에 틀림 없습니다. 명확히 해 주셔서 감사합니다 – coderplus

+0

시도해 보셨습니까? intent.setType ("*/*"); – jzafrilla

답변

0

나는이 문제를 다루려고 노력했고 나는 삼성의 갤러리가 그 메뉴를 통해 공유하기 위해 몇 가지 맞춤 동작을 사용한다고 확신한다. 나열된 응용 프로그램이 모두 사전 설치된 응용 프로그램이라는 점을 고려하면 삼성이 나열된 응용 프로그램 개발자 모두에게 사용자 지정 의도 동작을 사용하도록 동의 한 것이 분명합니다.

나는 삼성에 연락하려고 시도했지만 아직 응답하지 않았습니다.

0

나는 메뉴에서 가져 오는 방법을 여기 마련했습니다 :

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> 

당신은 그렇게 그것은 '아무튼 경우 나타나면 인텐시티 메뉴를 사용하고 있으며 사용자 지정 공유 목록이므로 강제로 들어갈 수는 없습니다.

+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을 제외하고 내 필터가 내 파일과 동일하다고 생각합니다. 모든 파일 유형에 대한 공유 메뉴가 표시됩니다. 원래 질문의 메뉴는 맞춤 Samsung 메뉴이며 Manifest를 수정하여이 메뉴에 들어가는 방법은 없다고 생각합니다. mimeType'photo/*'가 존재합니까? http://en.wikipedia.org/wiki/Internet_media_type – coderplus

+0

*/* 모든 유형의 파일을 정의하지만 Photo/*를 사용하면 이미지를 공유하려는 경우'image/* '를 사용했을 것입니다. 앱 외부에서 사진을 공유 할 수 있습니다. 그것의 일 벌금은 내 측면에서. –