Android taskAffinity проблема с указанием активности - PullRequest
0 голосов
/ 20 июня 2011

Я имею дело со странной проблемой здесь.

По сути, у меня есть одно приложение (созданное другим разработчиком), в котором есть действие, которое задает для своей taskAffinity значение "" и свой launchMode для "singleTask".

Когда телефон получает уведомление, я запускаю действие в своем приложении с флагом FLAG_ACTIVITY_NEW_TASK.

Мне бы хотелось, чтобы в моем действии было taskAffinity для этого другого приложения, если задача существует.

Когда я делаю dumpsys activity, я вижу, что приложение TaskRecord для других разработчиков имеет вид:

aj.streetPhone.app/.ViewActivity

Однако в моем манифесте о моей активности я указываю aj.streetphone.app, по-видимому, он не добавляет мою активность вчто задача приложения.Я пробовал другое имя пакета, и оно, кажется, работает.Возможно, проблема связана с тем, что имя задачи включает в себя действие, а не только имя пакета (по умолчанию).

У меня, как правило, возникает проблема с использованием '/', поскольку манифест непринять это.

android:taskAffinity="aj.streetPhone.app/.ViewActivity" <--- does not work!

Я пытался экранировать '/', добавленный юникодом, все.Пожалуйста, помогите!

Есть идеи?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Сходства задач (и разрешения, и процессы, и общие идентификаторы пользователей, и действия, и т. Д. И т. Д.) НЕ определяются по имени пакета приложения.Они представляют собой одну строку, многое должно быть уникальным во всем мире.Простое добавление «.foo» не делает его уникальным, потому что другое приложение может иметь имя пакета, которое является более короткой или более длинной версией, а также может иметь то же имя.Таким образом, для сходства и процессов вы можете использовать префикс «:» в имени, чтобы добавить его к собственному имени пакета и создать имя, которое гарантированно уникально для вашего пакета.

Таким образом, вы должны использовать уникальную строку для соответствия заданию.

0 голосов
/ 14 декабря 2012

/ действительно недопустимо.

Если только оно не было сокращено каким-либо образом (быстрый взгляд на dumpsys activity для моего собственного приложения, кажется, показывает, что это не так), полное имя вашей деятельности aj.streetPhone.app.ViewActivity.Однако, если вы хотите добавить имя вашего пакета к taskAffinity, вы можете просто использовать двоеточие, например :myAffinity.Тем не менее, taskAffinity не должно быть именем действия!

Насколько я понимаю, taskAffinity предназначено для контроля того, к какой "задаче" относится действие.Хотя я не могу прокомментировать, почему вы пытаетесь привязать действие к задаче другого приложения, вы можете очистить сходство, указывающее, что действие может быть в любой задаче;хотя я не пробовал этого, я полагаю, что это приведет, например, к кнопке «Назад», ведущей назад к любой активности, которой пользователь занимался ранее, а не к той активности, которая была последней активной в вашем приложении (вашей задаче).

Более подробная информация (откуда, к вашему сведению, цитировалась chemalarrea без указания кредита): https://groups.google.com/forum/?fromgroups=#!topic/android-developers/wKwnV1k_96A

Документация: https://developer.android.com/guide/topics/manifest/activity-element.html#aff

...