【问题标题】:Can <uses-library> be used to check if an app is installed and how? As opposed to a shared library?<uses-library> 可以用来检查应用程序是否已安装以及如何安装?与共享库相反?
【发布时间】:2012-05-26 23:26:13
【问题描述】:

我有一个应用小部件项目,它依赖于安装了相应的应用。

所以,所需应用的包名是

com.radlmaier.saintscalendar

在应用小部件清单中,我在标签内有以下标签:

<uses-library android:name="com.radlmaier.saintscalendar" android:required="true" />

现在,当应用程序未安装时,小部件安装会失败,这是应该的。 但是如果安装了应用程序,小部件安装也会失败,logcat 会说:

05-19 22:28:35.359: E/PackageManager(14680): Package com.radlmaier.saintscalendarwidget requires unavailable shared library com.radlmaier.saintscalendar; failing!

我显然在这里遗漏了一些东西。 与共享库相比,是否不能使用标签来检查已安装的包? 有人能启发我吗?

【问题讨论】:

    标签: android installation package manifest


    【解决方案1】:

    试试这个:

    Intent myIntent = new Intent(Intent.ACTION_MAIN).setClassName("com.radlmaier.saintscalendar", "com.radlmaier.saintscalendar.yourclassname");
    boolean isInstalled = getPackageManager().queryIntentActivities(myIntent, 0).size() > 0;
    

    如果尚未安装,并且您想将其发送到 Play 商店进行安装,请尝试以下操作:

    Intent marketIntent = new Intent(Intent.ACTION_VIEW);
    marketIntent.setData(Uri.parse("market://search?q=pname:com.radlmaier.saintscalendar"));
    startActivity(marketIntent);
    

    【讨论】:

      【解决方案2】:

      难道不能使用标签来检查已安装的包而不是共享库吗?

      这肯定是不可能的。 &lt;uses-library&gt; 用于需要 SDK 插件(例如,Google 地图)。

      我有一个应用小部件项目,它依赖于安装了相应的应用。

      Android 没有应用依赖机制,所以如果你想要这个,你将不得不自己滚动它。就个人而言,我建议将这些简单地组合到一个应用程序中。

      【讨论】:

      • 我会这样做,但该应用程序带有相当大的资产文件夹,因此首选安装位置是外部 sd 卡。由于两者都需要与最低 SDK 7 / Android 2.1 兼容,我需要在手机上安装小部件。因此,将两者分开是唯一的方法...... :(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多