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
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.