java.lang.RuntimeException:安装 Apk 时接收广播 Intent 时出错
java.lang.RuntimeException: Error receiving broadcast Intent On install Apk
我有一个用于更新我的应用程序的静态函数,使用 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));
}
}
在线下载complate后出现错误:
ctxt.startActivity(installIntent);
我的错误描述:
java.lang.RuntimeException:接收广播 Intent 时出错 { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=...
堆栈跟踪:stack trace
manager.getMimeTypeForDownloadedFile(downloadId)
这将返回 application/mobile
作为 MIME 类型。那不是有效的 MIME 类型。据推测,DownloadManager
从您下载此内容的 Web 服务器获得了此内容。如果那是您的 Web 服务器,请修复它以便为您的内容使用正确的 MIME 类型。
我有一个用于更新我的应用程序的静态函数,使用 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));
}
}
在线下载complate后出现错误:
ctxt.startActivity(installIntent);
我的错误描述:
java.lang.RuntimeException:接收广播 Intent 时出错 { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=...
堆栈跟踪:stack trace
manager.getMimeTypeForDownloadedFile(downloadId)
这将返回 application/mobile
作为 MIME 类型。那不是有效的 MIME 类型。据推测,DownloadManager
从您下载此内容的 Web 服务器获得了此内容。如果那是您的 Web 服务器,请修复它以便为您的内容使用正确的 MIME 类型。