安卓:如何从我的应用程序中打开另一个应用程序?

22

我知道如何在我的应用程序中使用意图(intent)和startActivity()来打开另一个活动,但是如何启动不同的应用程序呢?具体而言:

  • 如何确定用户是否在其设备上安装了所需的应用程序?
  • 如何启动该应用程序?
  • 如何向该应用程序传递参数?
  • 如何找到特定应用程序(比如 Adobe Reader 或 Google Maps)的所有这些信息?
3个回答

33

如何判断Intent是否可用:

  1. 尝试调用Intent,并处理ActivityNotFoundException异常,以判断其是否可用。

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

try {
    startActivity(intent);
} 
catch (ActivityNotFoundException e) {
    Toast.makeText(OpenPdf.this, 
        "No Application Available to View PDF", 
        Toast.LENGTH_SHORT).show();
}

或者

  • 查询包管理器,以查看它是否为预编译:

  • PackageManager packageManager = getPackageManager();
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setType("application/pdf");
    
    List list = packageManager.queryIntentActivities(intent,
        PackageManager.MATCH_DEFAULT_ONLY);
    
    if (list.size() > 0) {
        intent.setDataAndType(path, "application/pdf");
        startActivity(intent);
    }
    

    如何向一个应用程序传递参数或了解其功能:

    1. Google 应用程序可用意图列表
    2. 第三方应用程序可用意图列表 @ OpenIntents

    1

    0
    这对我有效:
    Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.testing_app");
    if (launchIntent != null) {
        startActivity(launchIntent);
    } else {
        Toast.makeText(MainActivity.this, "testing_app is not installed", Toast.LENGTH_LONG).show();
    }
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接