안드로이드 애플리케이션과 안드로이드가 공유 버튼과 공유 메커니즘을 어떻게 구현하는지 궁금합니다. 예를 들어 YouTube에서 공유 버튼을 누르면 공유 할 앱 목록이 팝업으로 표시됩니다. 이 목록은 어떻게 결정됩니까? 특정 "공유"의도가있는 경우 의도 엑스트라에 제공된 유형의 의도를 공유 할 수있는 모든 지점이 표시됩니까? 이를 구현하는 데 사용 된 디자인 패턴의 기술적 이름은 무엇입니까? 감사.
안드로이드 애플리케이션과 안드로이드가 공유 버튼과 공유 메커니즘을 어떻게 구현하는지 궁금합니다. 예를 들어 YouTube에서 공유 버튼을 누르면 공유 할 앱 목록이 팝업으로 표시됩니다. 이 목록은 어떻게 결정됩니까? 특정 "공유"의도가있는 경우 의도 엑스트라에 제공된 유형의 의도를 공유 할 수있는 모든 지점이 표시됩니까? 이를 구현하는 데 사용 된 디자인 패턴의 기술적 이름은 무엇입니까? 감사.
답변:
여기에는 커뮤니케이션 앱이 공유 할 수 있다고 말하는 메커니즘과 콘텐츠가있는 앱이 공유하는 메커니즘이 있습니다. 한 번에 하나씩 처리하지만 먼저 의도 에 대한 간단한 참고 사항을 다룰 것 입니다.
Android 의 의도 는 앱을 시작하는 데 사용됩니다. 바로 가기 또는 Windows 파일 연결처럼 작동 할 수 있습니다. 인 텐트는 시작할 앱 이름을 지정할 수 있지만 반드시 그럴 필요는 없습니다. 또한 수행 할 작업 (예 : "주 활동 열기", "이 URL보기", "달력 항목 작성") 및 수행 할 개체의 MIME 유형 (예 : 보려는 항목)을 지정할 수도 있습니다. 유형의 이미지 / jpeg) 일부 작업 이름은 특정 앱에 따라 다르지만, 앱이 상호 작용할 수 있도록 Android에 의해 표준화되었습니다.
각 앱은 인 텐트 필터 를 지정 하여 수행 할 수있는 작업 종류를 알려줍니다. 예를 들어 이미지 뷰어 앱은 MIME 유형이 "image / *"인 "이 URL보기"에 대한 의도 필터를 등록합니다. 웹 브라우저는 URL 체계가 "http"또는 "https"인 "이 URL보기"에 대한 의도 필터를 등록합니다. 사물을 공유 할 수 있도록 앱은 특정 유형 (예 : 사진 만 공유 할 수있는 경우) 또는 모든 유형에 대해 "보내기"의도에 대한 의도 필터를 등록합니다.
일부 콘텐츠를 공유하려는 앱은 "공유"작업 및 공유 할 콘텐츠를 가리키는 URL을 사용하여 의도를 만듭니다. (이는 수신 앱에 콘텐츠 앱의 개인 저장소에있는 파일 또는 콘텐츠 앱에서 생성 된 스트림에 임시로 액세스 할 수있게하는 "임시"URL 인 경우가 많습니다.) 의지. 그런 다음 Android 프레임 워크에 대한 의도를 제공하고 Android에 선택기 대화 상자 를 표시하도록 요청 합니다. Android는 설치된 모든 앱의 인 텐트 필터와 인 텐트를 비교하여 목록을 만들어 사용자에게 보여줍니다. 사용자가 특정 앱을 선택하면 Android가 해당 앱을 시작하고 의도를 전달합니다. 앱은 URL을 사용하여 원본 앱에서 콘텐츠를 가져옵니다.
마시멜로에는 Direct Share 라는 또 다른 메커니즘이 있습니다. 이 기능은 의도 메커니즘을 보완하므로 선택자 대화 상자에서 직접 공유 할 사람이나 그룹을 선택하여 "누가 그것을 보내고 싶은가"의 추가 단계를 건너 뛸 수 있습니다. 통신 앱은 서비스를 제공해야합니다. 콘텐츠가있는 앱이 선택자를 요청하면 Android는 각 관련 앱에 대한 서비스를 시작합니다. 서비스는 관련 공유 대상 목록을 반환 하고 Android는 이러한 모든 개별 목록을 대화 상자에 표시되는 목록으로 어셈블합니다.
나는 개발자가 아니기 때문에 그냥 설명 만 할 수 있습니다. 앱 Manifest
은 공유 작업에 대해 이해하고 기꺼이 응답하는 Mimetype을 선언 합니다. 이를 위해 소위 "의도 필터"를 정의합니다. 예 :
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/*" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="message/*" />
<data android:mimeType="multipart/*" />
<data android:mimeType="text/*" />
<data android:mimeType="video/*" />
</intent-filter>
따라서 "공유"버튼을 누를 때마다 공유 할 콘텐츠가 평가되고 형식을 기꺼이 받겠다 고 선언 한 앱과 비교됩니다.
출처 :