【问题标题】:How to make an Android app that depends on another app?如何制作依赖于另一个应用程序的Android应用程序?
【发布时间】:2011-12-05 04:36:01
【问题描述】:

如果我创建了一个依赖于另一个或多个应用程序的应用程序(例如:Facebook 和 Twitter 应用程序),但它们尚未安装,是否有一种方法可以检查这些依赖项并与我自己的应用程序同时安装它们应用?

【问题讨论】:

    标签: android dependencies


    【解决方案1】:

    我在需要安装 zxing 扫描仪应用程序的应用程序中执行此操作。 你会希望在你的 onclick 或 ontouch 中使用这个:

    try{
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.setPackage("com.google.zxing.client.android");
        startActivityForResult(intent, 0);
    } catch (Exception e) {
        createAlert("Barcode Scanner not installed!", "This application uses " +
        "the open source barcode scanner by ZXing Team, you need to install " +
        "this before you can use this software!", true);
    }
    

    哪个调用

    public void createAlert(String title, String message, Boolean button) {
        // http://androidideasblog.blogspot.com/2010/02/how-to-add-messagebox-in-android.html
        AlertDialog alertDialog;
        alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle(title);
        alertDialog.setMessage(message);
        if ((button == true)) {
            alertDialog.setButton("Download Now",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    Intent browserIntent = new Intent(
                        Intent.ACTION_VIEW,
                        Uri.parse("market://search?q=pname:com.google.zxing.client.android"));
                    startActivity(browserIntent);
                }
            });
        }
        alertDialog.show();
    }
    

    然后在整理出所有代码后,我意识到您要求在 与您的应用程序同时安装它。不确定我是否应该发布此代码,但它可能会有所帮助

    【讨论】:

    • 我认为你不应该只捕获有点宽泛的“异常”,捕获实际的异常实例可能会更好。
    • @AGrunewald 我完全同意! :) 我有时只是特别懒惰
    【解决方案2】:

    简答:不,您不能自动安装其他应用程序作为依赖项。

    更长的答案:

    Android Market 不允许您将要安装的其他应用程序声明为依赖项。作为一个系统,Market 似乎是为单一应用程序安装而设计的——而不是 Linux 发行版风格的巨型依赖图。

    运行时,您可以测试已安装的应用程序,如果是,则将您的用户推向市场。如果您需要,请参阅@QuickNick(测试是否安装了应用程序)和@TerryProbert(推向市场)建议的技术。

    您最好的选择可能是将您的应用设计为在依赖项不可用时优雅降级,并建议(或坚持)他们前往市场安装它们。

    【讨论】:

      【解决方案3】:

      从此开始:

      Intent mediaIntent = new Intent("com.example.intent.action.NAME");
      // add needed categories
      List<ResolveInfo> listResolveInfo = getPackageManager().queryIntentServices(mediaIntent, 0);
      if (listResolveInfo.size() != 0) {
        //normal behavior
      } else {
        //install what you need
      }
      

      我给你一个查询服务的例子。如果你想检查活动,那么你将调用 queryIntentActivities()。

      【讨论】:

        【解决方案4】:

        我认为遵循 Android 开发者博客上这篇文章中概述的模式会对您有所帮助。 http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html 正如 TerryProbert 指出的那样,如果您知道 Intent 不可用,则会提示用户安装缺少的应用程序。

        【讨论】:

          【解决方案5】:

          这是我用来返回存在的第一个任务活动的内容:

                          try {
                          Class<?> missionClass = Class.forName(mPackageName+".Mission"+mission);
                                  Method missionDescription;
                                  missionDescription = missionClass.getMethod("missionDescription");
                                  mMissionDescription = (String) missionDescription.invoke(null);
                                  if (mMissionDescription.length() > 0) {
                                      nextMission = mission;
                                      break;
                                  }
                              } catch (Exception e) {
                                  //DEBUG*/Log.v(this.getClass().getName(), "onResume: Mission no "+mission+" not found: "+e.getMessage());
                              }
          

          每个任务都保存在一个单独的类中,该类派生自 Mission 基类。派生类称为 Mission1、Mission24 等。

          并非所有任务都已定义。

          基类有一个抽象类missionDescription,它返回一个描述任务的字符串。

          此代码在循环中,因此测试任务 = 1 到 99,尝试调用任务描述。它会在返回找到的第一个任务的描述时返回。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-06-24
            • 1970-01-01
            • 1970-01-01
            • 2016-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多