Search code examples
androidandroid-intentandroid-download-manager

java.lang.RuntimeException: Error receiving broadcast Intent On install Apk


I have a static function for Update my application, with downloadManager:

 public static void downloadApk(final Context context, String apkurl){
        String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
        String fileName = "apk_update.apk";
        destination += fileName;
        final Uri uri = Uri.parse("file://" + destination);

        //Delete update file if exists
        File file = new File(destination);
        if (file.exists())
            file.delete();

        //set download manager
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(apkurl));
        request.setDescription("...");
        request.setTitle("...");

        //set destination
        request.setDestinationUri(uri);

        // get download service and enqueue file
        final DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        final long downloadId = manager.enqueue(request);

        //set BroadcastReceiver to install app when .apk is downloaded
        BroadcastReceiver onComplete = new BroadcastReceiver() {
            public void onReceive(Context ctxt, Intent intent) {
                Intent installIntent = new Intent(Intent.ACTION_VIEW);
                installIntent.setDataAndType(uri, manager.getMimeTypeForDownloadedFile(downloadId));
                installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                ctxt.startActivity(installIntent); ////Error on here
                ctxt.unregisterReceiver(this);
               // ctxt.finish();
            }
        };
        //register receiver for when .apk download is compete
        context.registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    }
}

Error occurs after download complate on line :

    ctxt.startActivity(installIntent);

my error description:

java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=...

stack trace : stack trace


Solution

  • manager.getMimeTypeForDownloadedFile(downloadId)
    

    This is returning application/mobile as the MIME type. That is not a valid MIME type. Presumably, DownloadManager got this from the Web server from which you downloaded this content. If that is your Web server, fix it to use the proper MIME type for your content.