0

ここで奇妙な問題を扱っています。

基本的に、taskAffinity を "" に指定し、launchMode を "singleTask" に指定するアクティビティを持つ (別の開発者によって作成された) 1 つのアプリケーションがあります。

電話が通知を受け取ると、アプリケーションで FLAG_ACTIVITY_NEW_TASK フラグを使用してアクティビティを開始します。

タスクが存在する場合、アクティビティにその他のアプリケーションの taskAffinity を持たせたいと考えています。

実行するdumpsys activityと、他の開発者アプリケーションの TaskRecord が次のようになっていることがわかります。

aj.streetPhone.app/.ViewActivity

ただし、アクティビティのマニフェストで、aj.streetphone.appアクティビティがそのアプリケーション タスクに追加されないように指定します。別のパッケージ名を試してみましたが、うまくいっているようです。この問題はおそらく、タスク名にパッケージ名 (デフォルト) だけでなく、アクティビティが含まれているという事実に関係しています。

マニフェストが受け入れないため、基本的に「/」の使用に問題があります。

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

ユニコードによって追加された「/」をすべてエスケープしようとしました。助けてください!

何か案は?

4

2 に答える 2

1

タスク アフィニティ (およびアクセス許可、プロセス、共有ユーザー ID、アクションなど) は、アプリ パッケージ名では修飾されません。それらは単一の文字列であり、多くはグローバルに一意である必要があります。「.foo」を追加するだけでは一意にはなりません。別のアプリが、独自の短いバージョンまたは長いバージョンのパッケージ名を持ち、同じ名前を思いつく可能性があるためです。したがって、アフィニティとプロセスの場合、名前に「:」プレフィックスを使用して独自のパッケージ名に追加し、パッケージに対して一意であることが保証された名前を作成できます。

したがって、タスク アフィニティには一意の文字列を使用する必要があります。

于 2012-02-27T19:06:13.763 に答える
0

/ は確かに無効です。

なんらかの方法で省略されていない限り (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

于 2012-12-14T19:58:56.240 に答える