2015-01-14 1 views
2

"My First App"에 "공유"의도를 처리하는 활동이 있습니다. 앨범을 "나의 첫 앱"MainActivity 앨범의 작업의 일부가됩니다에서 이미지를 공유, 킷캣에서Lollipop : 공유 활동을 시작한 작업에 내 활동 유지

<activity 
     android:name="com.example.foo.myfirstapp.MainActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="image/jpeg"/> 
     </intent-filter> 

    </activity> 

: AndroidManifest.xml에있는 그것의 활동은 다음과 같다. 이것이 바람직한 행동입니다.

Lollipop에서 앨범의 이미지를 "My First App"으로 공유하면 "My First App"의 새로운 인스턴스가 시작됩니다. 개요 화면을 보면 앨범 작업이 있고 ... "My First App"에 대한 별도의 항목이 있습니다. 다른 이미지를 공유하면 "My First App"이라는 두 개의 인스턴스로 끝납니다.

질문 : Lollipop을 KitKat과 동일한 방식으로 공유의도를 처리하려면 어떻게해야합니까?

내가 한 일은 다음과 같습니다. 앨범에서 보낸 인 텐트에는 OS에 따라 다른 플래그가 설정되어 있습니다. (나는이 getIntent()을 사용하고 mFlags보고 있어요.)

Kitkat으로 : 0x80001 (524289) : FLAG_GRANT_READ_URI_PERMISSION, FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

롤리팝 : 0x18080001 (403,177,473) : FLAG_GRANT_READ_URI_PERMISSION, FLAG_ACTIVITY_MULTIPLE_TASK, FLAG_ACTIVITY_NEW_DOCUMENT, FLAG_ACTIVITY_NEW_TASK

읽기에서 http://developer.android.com/reference/android/content/Intent.html,이 마지막 세 플래그가 문제를 일으키는 것으로 보입니다. 특히

FLAG_ACTIVITY_MULTIPLE_TASK 이러한 행동 (FLAG_ACTIVITY_NEW_DOCUMENT 또는 FLAG_ACTIVITY_NEW_TASK) 모두와 결합

가 일치하는 작업에 대한 검색을 생략하고 무조건 새 작업을 시작하도록 수정됩니다.

내가 성공하지 AndroidManifest.xml의 활동에 android:launchModeandroid:documentLaunchMode을 지정하여 이러한 플래그를 "무시"를 시도했습니다. documentLaunchMode를 사용 http://developer.android.com/reference/android/R.attr.html#documentLaunchMode에서

는 "결코"

때문에 활동이 텐트는 Intent.FLAG_ACTIVITY_NEW_DOCUMENT 포함되어있는 경우에도 새 문서에 실행되지 않습니다, 유망 보인다. 이것은 활동 작성자에게 활동이 사용되는 방법에 대한 궁극적 인 제어권을 부여합니다. 하지만 이것은 작동하지 않았습니다.

나는 또한 android:taskAffinity으로 생각하지만 "어떤 작업을 시작 하시겠습니까?"라고 말할 방법이없는 것처럼 보입니다.

+0

Android L의 동작에서이 변경 사항에 대한 참조를 제공 할 수 있습니까? 나는 개발자 사이트에서 같은 것을 찾을 수 없었다. –

답변

1

당신은 이것에 대해 아무 것도 할 수 없다는 것을 두려워합니다. 그것은 당신의 통제하에 있지 않습니다. 이것은 "앨범"앱이 "공유"의도를 시작하는 방식의 변화입니다. 활동에 당신의 활동을 원하지 않는다면 거기에 강요 할 수 없습니다.

"공유"활동이 여러 번 발생하는 데 문제가있는 경우 사용자의 필요에 따라 "공유"활동을 launchMode="singleTask" 또는 launchMode="singleInstance"으로 선언 할 수 있지만 다른 일은 발생할 수 있습니다.

+1

감사합니다. 'excludeFromRecents'와 같은 모양은 "recents"영역에서 모든 "share"활동을 보는 것을 막기 위해 사용될 수 있습니다. – Michiyo

관련 문제