1. ホーム
  2. android

[解決済み] 自分のアプリケーションから別のアプリケーションを開く(インテント)

2022-05-25 05:05:43

質問

私は自分のプログラムを更新する方法を知っていますし、定義済みの Uri を使用してプログラムを開く方法も知っています (たとえば、SMS や電子メールの場合)。

MyTracks または他のアプリケーションを開くために、どのようにインテントを作成できるかを知る必要がありますが、どのようなインテントを聞くのかわかりません。

DDMS からこの情報を得ましたが、これを使用できる Intent に変換することに成功していません。これは、MyTracks を手動で開いたときから取得しました。

ご協力ありがとうございました。

05-06 11:22:24.945: INFO/ActivityManager(76): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks bnds=[243,338][317,417] }
05-06 11:22:25.005: INFO/ActivityManager(76): Start proc com.google.android.maps.mytracks for activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: pid=1176 uid=10063 gids={3003, 1015}
05-06 11:22:26.995: INFO/ActivityManager(76): Displayed activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: 1996 ms (total 1996 ms)

どのように解決するのですか?

まず、Android におけるアプリケーションの概念は、少し拡張されたものです。

アプリケーション (技術的にはプロセス) は、複数のアクティビティ、サービス、コンテンツ プロバイダー、および/またはブロードキャスト リスナーを持つことができます。それらの少なくとも 1 つが実行されている場合、アプリケーションは稼働しています (プロセス)。

したがって、特定しなければならないのは、どのようにアプリケーションを開始するかということです。

OK...ここで、試してみてください。

  1. でインテントを作成します。 action=MAINcategory=LAUNCHER
  2. を取得します。 PackageManager を使い、現在のコンテキストから context.getPackageManager
  3. packageManager.queryIntentActivity(<intent>, 0) ここで、インテントには category=LAUNCHER , action=MAIN または packageManager.resolveActivity(<intent>, 0) で最初のアクティビティを取得する場合は main/launcher
  4. を取得します。 ActivityInfo を取得します。
  5. から ActivityInfo を取得します。 packageNamename
  6. 最後に、別のインテントを category=LAUNCHER , action=MAIN , componentName = new ComponentName(packageName, name)setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
  7. 最後に context.startActivity(newIntent)