从自己的意图中打开另一个应用程序

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

如何创建打开MyT或任何应用程序的意图。

我从DDMS获得了这个信息,但我没有成功地把这个转变成我可以使用的意图。这是从手动打开MyT架时开始的。

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. 创建意图action=MAINcategory=LAUNCHER
  2. 弄到PackageManager从当前上下文中使用context.getPackageManager
  3. packageManager.queryIntentActivity(<intent>, 0)在有意图的地方category=LAUNCHERaction=MAINpackageManager.resolveActivity(<intent>, 0)使用Main/Launcher获取第一个活动
  4. 弄到ActivityInfo你感兴趣的是
  5. ActivityInfo,去拿packageNamename
  6. 最后,用以下方法创建另一个意图category=LAUNCHERaction=MAINcomponentName = new ComponentName(packageName, name)setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
  7. 最后,context.startActivity(newIntent)
用户回答回答于

/** Open another app.
 * @param context current Context, like Activity, App, or Service
 * @param packageName the full package name of the app to open
 * @return true if likely successful, false if unsuccessful
 */
public static boolean openApp(Context context, String packageName) {
    PackageManager manager = context.getPackageManager();
    try {
        Intent i = manager.getLaunchIntentForPackage(packageName);
        if (i == null) {
            return false;
            //throw new ActivityNotFoundException();
        }
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        context.startActivity(i);
        return true;
    } catch (ActivityNotFoundException e) {
        return false;
    }
}

示例用法:

openApp(this, "com.google.android.maps.mytracks");

扫码关注云+社区