public class CompleteReceiver extends BroadcastReceiver
{android
private DownloadManager downloadManager = null;网络
@Override
public void onReceive(Context context, Intent intent)
{
try {
String action = intent.getAction();
if (action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
{
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); // TODO
// 判断这个id与以前的id是否相等,若是相等说明是以前的那个要下载的文件
Query query = new Query();
query.setFilterById(id);
downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Cursor cursor = downloadManager.query(query);app
int columnCount = cursor.getColumnCount();
String path = null; // TODO 这里把全部的列都打印一下,有什么需求,就怎么处理,文件的本地路径就是path
String local_fileName=null;
while (cursor.moveToNext())
{
for (int j = 0; j < columnCount; j++)
{
String columnName = cursor.getColumnName(j);
String string = cursor.getString(j);
// 输出
output(context, columnName, string);
if (columnName.equals("local_uri"))
{
path = string;
} else if (columnName.equals("local_filename")){
local_fileName=string;
} else {
//
}
}
}
cursor.close();
// 若是sdcard不可用时下载下来的文件,那么这里将是一个内容提供者的路径,这里打印出来,有什么需求就怎么样处理
if (path != null && path.startsWith("content:"))
{
cursor = context.getContentResolver().query(Uri.parse(path), null, null, null, null);
columnCount = cursor.getColumnCount();
while (cursor.moveToNext())
{
for (int j = 0; j < columnCount; j++)
{
String columnName = cursor.getColumnName(j);
String string = cursor.getString(j);
// 输出
output(context, columnName, string);
}
}
cursor.close();
}
if (Common.isNotNull(local_fileName)) {
String worksheetId = local_fileName.substring(local_fileName.lastIndexOf("/")+1,local_fileName.lastIndexOf("."));
if (local_fileName != null && local_fileName.substring(local_fileName.lastIndexOf(".")+1).equals("apk"))
{
install(context, local_fileName);
}else if (local_fileName!= null && local_fileName.substring(local_fileName.lastIndexOf(".")+1).equals("db") && !worksheetId.equalsIgnoreCase(IConstant.OFFLINE_PUB_DB_NAME)) {
new WorksheetService().updateOfflineStatues(context, worksheetId, "1");
Toast.makeText(context, "离线数据包下载已完成", Toast.LENGTH_SHORT).show();
} else {
//
}
}
} else if (action.equals(DownloadManager.ACTION_NOTIFICATION_CLICKED))
{
//点击了notification后的操做
}
} catch (Exception er) {
Log.error("资源下载异常", er);
}
}
ide
public class DownLoadNewApk {
private static final Logger Log = LoggerFactory.getLogger(WService.class);this
public DownLoadNewApk(Context context) {
this.context = context;
}url
private Context context;ip
public void getDownLoad(String url) {
try {
@SuppressWarnings("static-access")
DownloadManager downloadManager = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE);
url = url.replace("HTTP", "http");
Uri uri = Uri.parse(url);
Request request = new Request(uri);资源
// 设置容许使用的网络类型,这里是移动网络和wifi均可以
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);get
// 禁止发出通知,既后台下载,若是要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
// request.setShowRunningNotification(false);string
// 不显示下载界面
request.setVisibleInDownloadsUi(true);
request.setDescription("下载中...");
request.setMimeType("application/com.trinea.download.file");
/* * 设置下载后文件存放的位置,若是sdcard不可用,那么设置这个将报错,所以最好不设置。 * 若是sdcard可用,下载后的文件在/mnt/sdcard/Android/data/packageName/files目录下面。 * 若是sdcard不可用,设置了下面这个将报错,不设置,下载后的文件在/cache这个 目录下面 */ if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { request.setDestinationInExternalPublicDir("/download/", url.substring(url.lastIndexOf("/") + 1)); } downloadManager.enqueue(request); // TODO 把id保存好,在接收者里面要用,最好保存在Preferences里面 } catch (Exception er) { Log.error("", er); } }