位置: 编程技术 - 正文
推荐整理分享ROM开发 系统下载应用开发(rom开发是做什么的),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:手机rom开发流程,rom开源,rom开发论坛,rom开发工具箱,rom开发是做什么的,rom开发工具,rom包开发,rom开发教程,内容如对您有帮助,希望把文章链接给更多的朋友!
一、下载列表数据的分块显示
下载文件内容的数据库查询需要用到frameworksbasecorejavaandroidapp目录下的DownloadManager.java类,若要下载的列表数据分块显示,如:让处于正在下载状态的下载文件处于下载列表项前面,下载完毕或者下载失败的文件处于列表项后面,即分为两部分显示。在所操作的Query类中添加根据下载状态分类显示查询的Boolean设置操作函数:
privatebooleanmIsSortByDownloadingStateAndDate =false;
/**
* setSortByDownloadingStateAndDate:TODO<br/>
*
*@param pValue boolean
*@hide
*/
publicvoidsetSortByDownloadingStateAndDate(boolean pValue) {
mIsSortByDownloadingStateAndDate = pValue;
}
在runQuery(ContentResolverresolver, String[] projection, Uri baseUri)函数中修改orderBy赋逻辑:
if (mIsSortByDownloadingStateAndDate) {
orderBy = COLUMN_STATUS " ASC, " Downloads.Impl.COLUMN_LAST_MODIFICATION " DESC";
}
优先根据下载状态排序,再根据下载文件的时间来排序。
二、下载的暂停和继续
下载页面列表数据的显示是直接从下载数据库中查询得到,在DownloadProviderUI工程中只是数据库数据在UI上的呈现,下载的实际后台逻辑处理在DownloadProvider工程中。处于下载状态中的下载暂停和控制都是改变数据库中的数据,并没有与DownloadProvider后台服务进行直接的交互。
1、暂停下载是将数据库中Downloads.Impl.COLUMN_CONTROL字段置为Downloads.Impl.CONTROL_PAUSED。逻辑代码如下:
final Uri uri = ContentUris.withAppendedId( Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI,mId);
final ContentValuesvalues = new ContentValues();
values.put(Downloads.Impl.COLUMN_CONTROL,Downloads.Impl.CONTROL_PAUSED);
getContentResolver().update(uri,values, null,null);
2、 继续下载是更新Downloads.Impl.COLUMN_CONTROL字段为Downloads.Impl.CONTROL_RUN,且需将Downloads.Impl.COLUMN_STATUS字段设置为Downloads.Impl.STATUS_RUNNING。逻辑代码如下:
final Uri uri = ContentUris.withAppendedId( Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI,mId);
final ContentValues values =new ContentValues();
values.put(Downloads.Impl.COLUMN_CONTROL, Downloads.Impl.CONTROL_RUN);
values.put(Downloads.Impl.COLUMN_STATUS, Downloads.Impl.STATUS_RUNNING);
getContentResolver().update(uri,values,null,null);
三、原生系统下载的Bug
原生系统下载服务会在当前没有继续下载任务的时候直接停止下载服务,这样会导致后续的下载暂停和继续的控制无法进行,在停止下载服务的操作之前需要添加是否有暂停的下载任务的判断。
// 添加此判断 if(!hasPauseTask()){ // if (stopSelfResult(startId)) { if (DEBUG_LIFECYCLE) Log.v(TAG, "Nothing left; stopped"); getContentResolver().unregisterContentObserver(mObserver); mScanner.shutdown(); mUpdateThread.quit(); } }
private boolean hasPauseTask() { final ContentResolver resolver = getContentResolver(); final Cursor cursor = resolver.query( Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, null, null, null, null); try{ if (cursor != null && cursor.moveToFirst()) { for (int i = 0; i < cursor.getCount(); i) { int status = cursor.getInt(cursor .getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS)); if (status < Downloads.Impl.STATUS_SUCCESS) { return true; } cursor.moveToNext(); } } }finally{ if(cursor!=null){ cursor.close(); } } return false; }
android 检测网络状况 一.编写目的在android开发中,很多时候我们都需要网络交互数据。但在这之前,我们一般会判断网络,这样一方面能使代码更合理,避免无谓的网络访问
Android------初学GPS定位 GPS英文是GlobalPositioningSystem全球定位系统的简称。Android为GPS功能支持专门提供了一个LocationManager,位置管理器。所有GPS定位相关的服务、对象都将由该
Android带有undo,redo功能的EditText 没别的,只有代码自己看。。。packagezwp.mycalendar.widget;importjava.util.ArrayList;importjava.util.List;importandroid.content.Context;importandroid.text.Editable;importandroid.text.TextW
标签: rom开发是做什么的
本文链接地址:https://www.jiuchutong.com/biancheng/382194.html 转载请保留说明!友情链接: 武汉网站建设