如何制作依赖于另一个应用程序的Android应用程序?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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,尝试调用任务描述。它会在返回找到的第一个任务的描述时返回。

【讨论】:

以上是关于如何制作依赖于另一个应用程序的Android应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

加载依赖于另一个域的程序集时的 FileNotFound [重复]

依赖于另一个自创建库的自创建库

如何使用 Kotlin/native 生成​​依赖于另一个的 .framework?

如何使用 React 钩子处理/链接依赖于另一个的同步副作用

如何创建依赖于另一个 JAR 的 JAR?

允许Shiny numericInput依赖于另一个numericInput