【问题标题】:Android: why Download-Manager automatically run (downloaded) apk-file in android?Android:为什么 Download-Manager 会在 android 中自动运行(下载)apk 文件?
【发布时间】:2015-07-20 15:56:24
【问题描述】:

问题是,在我使用这种方法从服务器下载 .apk 文件后:

public void Update(String apkName) {
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

    File file = new File("/sdcard/Download/"+ apkName + ".apk");
    if (file.exists()) {
        file.delete();
    }

    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS + "/", apkName + ".apk");       
    DownloadManager manager = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
    manager.enqueue(request);
}

然后我使用 BroadCastReciever 在下载操作完成后执行安装操作,如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
// some codes here...

BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)){
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/Download/" + apkName + ".apk")),
                        "application/vnd.android.package-archive");
                startActivity(i);
            } else {

            }

        }
    };

    getActivity().registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

    download_apk(apkName);
    return rootView;
}

现在的问题是,当下载操作完成时,DownloadManager 尝试安装 apk 文件,我得到 this,即“解析错误/解析包时出现问题”。

点击确定后,会出现真正的安装页面(由广播接收器触发)。

我在 Activity 中运行这个过程,它非常好。正如你在上面看到的,这次它是在 Fragment 中!这可能是原因吗??

如何阻止 DownloadManager 自动运行 apk? 谁能帮帮我?

【问题讨论】:

  • 解析错误意味着检查你的minSdkTargetSdk版本
  • @MD:我做到了,没问题。我的设备是 kitkat 4.4,minSDK 是 13
  • targetsdk 是什么?

标签: android broadcastreceiver download-manager


【解决方案1】:

为什么Download-Manager 会在android 中自动运行(下载)apk 文件?

下载管理器不会自动开始下载 APK。

如何阻止 DownloadManager 自动运行 apk?

显然您不理解您在问题中粘贴的代码,因此广播接收到 APK 的内容。只需删除它及其注册即可。

【讨论】:

  • 我做了,Parse-error 出现了。 BroadCastReciever 做得很好。我需要停止第一次运行,这是如何执行的。
  • 这是由广播接收器的 startActivity 完成的。所以它要么做得很好,在这种情况下你的问题是什么,或者你需要摆脱它来停止自动安装。
  • 正如您在上面看到的代码,我只运行了一次 apk,但下载 apk 后它运行了两次:第一次失败,第二次成功。我需要知道第一次运行是如何发生的并摆脱它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多