【问题标题】:install apk from url从 url 安装 apk
【发布时间】:2011-08-22 14:10:39
【问题描述】:

我正在尝试从 URL 安装 APK。这是我的代码:

Intent promptInstall = new Intent(android.content.Intent.ACTION_VIEW);
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
promptInstall.setDataAndType(Uri.parse("http://10.0.2.2:8081/MyAPPStore/apk/Teflouki.apk"), "application/vnd.android.package-archive" );

startActivity(promptInstall);

但是我有这个问题:

05-10 15:09:29.511: ERROR/AndroidRuntime(1668): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=http://10.0.2.2:8081/MyAPPStore/apk/Teflouki.apk typ=application/vnd.android.package-archive flg=0x10000000 }

提前致谢。

【问题讨论】:

标签: android


【解决方案1】:

您应该在安装前下载xxx.apk到存储中:

Intent promptInstall = new Intent(android.content.Intent.ACTION_VIEW);
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
promptInstall.setDataAndType(Uri.parse("storage/xxx.apk"), "application/vnd.android.package-archive" );
startActivity(promptInstall);

【讨论】:

  • 如何从 URL 下载 apk 到我的下载文件夹??
【解决方案2】:

如果应用在市场上不可用,这将无济于事,但万一是:

Uri marketUri = Uri.parse("market://search?q=pname:com.appmaker.tefloukipackage");
Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
try {
    context.startActivity(marketIntent);
} catch (ActivityNotFoundException ex) {
    showAlertDialog(context, "Error", "Could not launch the market application.", true, null);
}

【讨论】:

  • Intent promptInstall = new Intent("android.intent.action.VIEW",Uri.parse("10.0.2.2:8081/MyAPPStore/apk/Teflouki.apk";)); startActivity(promptInstall);
  • @ladyandroid 你是如何打开安装程序的?如果我使用手机只下载应用程序,但没有提示安装它。
  • @htafoya 你有没有让你的启动安装?
  • 这只是下载。下载后我也无法启动安装程序。有人让它自动安装吗?
  • @MSquare,无法提示自动安装apk。最终用户必须点击它开始安装。
【解决方案3】:

跟随。

在你的模块清单中,添加

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

//Inside application block
<application>
    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_path"/>
    </provider>
</application>

在您的模块 res/xml 文件夹中,如果没有创建此文件夹,请使用文件 provider_path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

并使用此方法。

private fun updateApplication(activity: Activity) {
    //This will get you the root directory path
    val externalStoragePublicDirectory: String =
        Environment.getExternalStorageDirectory().path

    val externalStoragePublicDirectoryFile =
        File(externalStoragePublicDirectory, "MyApp" + ".apk")

    val uri = FileProvider.getUriForFile(
        activity.applicationContext,
        activity.applicationContext.packageName + ".provider",
        externalStoragePublicDirectoryFile
    )

    val installAppIntent = Intent(Intent.ACTION_VIEW)
        .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
        .setDataAndType(
            uri,
            "application/vnd.android.package-archive"
        )
        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        .putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
    activity.startActivity(installAppIntent)
    //This will close your app, remove if not needed
    exitProcess(0)
}

重要,还可以去你的手机设置,搜索未知来源,在旧设备中启用它,但在新设备中,搜索你的应用并允许它安装新应用包的权限。只有这样,您才会弹出安装应用程序。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2017-12-30
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2012-05-30
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多