android软件工程师如何实现收藏功能

Android 软件自动更新功能的实现
-------------
新增文件夹...
新增文件夹
(多个标签用逗号分隔)
一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更新,那么如何让用户第一时间获取最新的应用安装包呢?那么就要求我们从第一个版本就要实现升级模块这一功能。
自 动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比 如,提示语;最新版本的url等)。然后我们给出提示框,用户点击开始下载,下载完成开始覆盖安装程序,这样用户的应用就保持最新的拉。
为了让大家容易理解,我像往常一样准备一个小例子,这里为了方便我就省去了和后台交互部分了。步骤分别如下:
第一步:新建一个Android工程命名为:UpdateDemo.代码结构如下图所示:
第二步:新建一个UpdateManager.java类,负责软件更新功能模块,代码如下:
package com.tutor.
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.io.InputS
import java.net.HttpURLC
import java.net.MalformedURLE
import java.net.URL;
import android.app.AlertD
import android.app.D
import android.app.AlertDialog.B
import android.content.C
import android.content.DialogI
import android.content.I
import android.content.DialogInterface.OnClickL
import android.net.U
import android.os.H
import android.os.M
import android.view.LayoutI
import android.view.V
import android.widget.ProgressB
public class UpdateManager {
private Context mC
private String updateMsg = &有最新的软件包哦,亲快下载吧~&;
//返回的安装包url
private String apkUrl = &http://softfile.:8080/msoft/179//qq_hd_mini_1.4.apk&;
private Dialog noticeD
private Dialog downloadD
/* 下载包安装路径 */
private static final String savePath = &/sdcard/updatedemo/&;
private static final String saveFileName = savePath + &UpdateDemoRelease.apk&;
/* 进度条与通知ui刷新的handler和msg常量 */
private ProgressBar mP
private static final int DOWN_UPDATE = 1;
private static final int DOWN_OVER = 2;
private Thread downLoadT
private boolean interceptFlag =
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case DOWN_UPDATE:
mProgress.setProgress(progress);
case DOWN_OVER:
installApk();
public UpdateManager(Context context) {
this.mContext =
//外部接口让主Activity调用
public void checkUpdateInfo(){
showNoticeDialog();
private void showNoticeDialog(){
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle(&软件版本更新&);
builder.setMessage(updateMsg);
builder.setPositiveButton(&下载&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
showDownloadDialog();
builder.setNegativeButton(&以后再说&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
noticeDialog = builder.create();
noticeDialog.show();
private void showDownloadDialog(){
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle(&软件版本更新&);
final LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.progress, null);
mProgress = (ProgressBar)v.findViewById(R.id.progress);
builder.setView(v);
builder.setNegativeButton(&取消&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
interceptFlag =
downloadDialog = builder.create();
downloadDialog.show();
downloadApk();
private Runnable mdownApkRunnable = new Runnable() {
public void run() {
URL url = new URL(apkUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.connect();
int length = conn.getContentLength();
InputStream is = conn.getInputStream();
File file = new File(savePath);
if(!file.exists()){
file.mkdir();
String apkFile = saveFileN
File ApkFile = new File(apkFile);
FileOutputStream fos = new FileOutputStream(ApkFile);
int count = 0;
byte buf[] = new byte[1024];
int numread = is.read(buf);
progress =(int)(((float)count / length) * 100);
//更新进度
mHandler.sendEmptyMessage(DOWN_UPDATE);
if(numread &= 0){
//下载完成通知安装
mHandler.sendEmptyMessage(DOWN_OVER);
fos.write(buf,0,numread);
}while(!interceptFlag);//点击取消就停止下载.
fos.close();
is.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
* @param url
private void downloadApk(){
downLoadThread = new Thread(mdownApkRunnable);
downLoadThread.start();
* @param url
private void installApk(){
File apkfile = new File(saveFileName);
if (!apkfile.exists()) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse(&file://& + apkfile.toString()), &application/vnd.android.package-archive&);
mContext.startActivity(i);
}第三步:在MainActivity.java也就是主Activity调用,代码如下:
package com.tutor.
import android.app.A
import android.os.B
public class MainAcitivity extends Activity {
private UpdateManager mUpdateM
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//这里来检测版本是否需要更新
mUpdateManager = new UpdateManager(this);
mUpdateManager.checkUpdateInfo();
}第四步:添加程序所用的资源与权限:
下载的时候用到了ProgressBar,所以事先写了一个progress.xml布局文件,代码如下:
下载的时候用到了网络部分,所以要在AndroidManifest.xml中添加网络权限,代码如下:
第五步:运行查看效果如下:
&图一:提示有最新包&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图二:点击开始下载
图三:下载完开始安装,我这里模拟器空间不足了。
OK~大功告成了,继续看球,阿森纳已经0:1了,希望范大将军救驾!大家晚安~稍后将会为大家分享更多内容,尽请期待!
相关资讯  — 
相关文档  — 
收藏:70人
发布时间: 09:15:19
同类热门经验
84460次浏览
169261次浏览
102896次浏览
66164次浏览
44003次浏览
OPEN-OPEN, all rights reserved.| 漏洞检测 |
| 隐藏捆绑 |
android5.0系统设置搜索功能简析
一、目的: 简单介绍系统设置搜索功能实现,初步熟悉搜索数据库构建规则以及匹配逻辑。 二、相关问题解答 1、系统设置可对那些设置项进行构建搜索数据库? 答:系统设置对数据项的构建规则在com.android.settings.search.SearchIndexableResources类中进行定
一、目的:
简单介绍实现,初步熟悉数据库构建规则以及匹配逻辑。
二、相关问题解答
1、可对那些设置项进行构建搜索数据库?
答:系统设置对数据项的构建规则在com.android.settings.search.SearchIndexableResources类中进行定义,例如如下,将wifi设置,wifi高级设置设置项假如搜索数据匹配库。
sResMap.put(WifiSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(WifiSettings.class.getName()),
NO_DATA_RES_ID,
WifiSettings.class.getName(),
R.drawable.ic_settings_wireless));
sResMap.put(AdvancedWifiSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(AdvancedWifiSettings.class.getName()),
R.xml.wifi_advanced_settings,
AdvancedWifiSettings.class.getName(),
R.drawable.ic_settings_wireless)
2、进行关键字搜索时,有多个匹配项,在展示时,他们的排序规则是什么?
答:com.android.settings.search.Ranking,其中定义了每个设置项对应的RAND_ID.例如:
sRankMap.put(WifiSettings.class.getName(), RANK_WIFI);
sRankMap.put(AdvancedWifiSettings.class.getName(), RANK_WIFI);
sRankMap.put(SavedAccessPointsWifiSettings.class.getName(), RANK_WIFI);
在进行搜索匹配时,会根据RANK_ID进行排序:
private String buildSearchSQL(String query, String[] colums, boolean withOrderBy) {
StringBuilder sb = new StringBuilder();
sb.append(buildSearchSQLForColumn(query, colums));
if (withOrderBy) {
sb.append(& ORDER BY &);
sb.append(IndexColumns.DATA_RANK);
return sb.toString();
3、设置中的设置项如何被解析并加入到搜索匹配数据库中的?
如,下图代码所示,为wifi高级设置项:
sResMap.put(AdvancedWifiSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(AdvancedWifiSettings.class.getName()),
R.xml.wifi_advanced_settings,
AdvancedWifiSettings.class.getName(),
R.drawable.ic_settings_wireless));
其中定义了R.xml.wifi_advanced_settings,,那么在Index.java中,会对该xml文件进行解析,并加入到搜索数据库中。如下图代码:
if (!nodeName.equals(NODE_NAME_CHECK_BOX_PREFERENCE)) {
summary = getDataSummary(context, attrs);
String entries =
if (nodeName.endsWith(NODE_NAME_LIST_PREFERENCE)) {
entries = getDataEntries(context, attrs);
// Insert rows for the child nodes of PreferenceScreen
updateOneRowWithFilteredData(database, localeStr, title, summary, null, entries,
fragmentName, screenTitle, iconResId, rank,
keywords, intentAction, intentTargetPackage, intentTargetClass,
true, key, -1 /* default user id */);
String summaryOn = getDataSummaryOn(context, attrs);
String summaryOff = getDataSummaryOff(context, attrs);
if (TextUtils.isEmpty(summaryOn) && TextUtils.isEmpty(summaryOff)) {
summaryOn = getDataSummary(context, attrs);
updateOneRowWithFilteredData(database, localeStr, title, summaryOn, summaryOff,
null, fragmentName, screenTitle, iconResId, rank,
keywords, intentAction, intentTargetPackage, intentTargetClass,
true, key, -1 /* default user id */);
非CheckBoxPreference的设置项,会解析preference的title以及summary。CheckBoxPreference类型的设置项会解析summaryOn,summaryOff等。也就是说解析存在细微差别。
详细解析流程可关注Index.java中的indexFromResource()方法。
如下图代码所示:
sResMap.put(WifiSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(WifiSettings.class.getName()),
NO_DATA_RES_ID,
WifiSettings.class.getName(),
R.drawable.ic_settings_wireless));
这类与类一的不同在于,它没有明确指定xml文件,这里是:NO_DATA_RES_ID,。那么这种情况,其会在其类中定义名称为:SEARCH_INDEX_DATA_PROVIDER的SearchIndexProvider,在其中会定义加载那些设置项。
4、如何为一个设置项定义多个匹配名字?
答:匹配逻辑本身是弱匹配,我们看下设置的匹配逻辑会匹配以下几项:
private static final String[] MATCH_COLUMNS_PRIMARY = {
IndexColumns.DATA_TITLE,
IndexColumns.DATA_TITLE_NORMALIZED,
IndexColumns.DATA_KEYWORDS
title就是每个设置项的title名称,TITLE_NORMALIZED只是对title做了一些格式化操作。最重要的就是我们的keyword了,我们可以使用keywords来实现为一个设置项指定额外匹配名称,例如:
5、系统设置是否支持搜索匹配加载外部设置项?
答:系统设置存在搜索匹配外部应用设置项的。系统设置会加载所有应用中AndroidManifest.xml中配置了&android.content.action.SEARCH_INDEXABLES_PROVIDER&的provider,并从该provider中读取设置项到设置的数据库中。
由于android5.0初步实现了该功能,系统中很多应用还没有进行Provider的创建,故而搜索匹配其他应用的体验性不是很好。
三、我们如何将我们新开发的设置项加入到系统设置中。
1、首先如果,新增加的设置项在一级目录,或者多层级目录,并且该设置项为leui新增的,即原生不存在的。需要将该一级设置项加入到:SearchIndexableResources的sResMap成员变量中。
2、如果是在原有设置项内新增设置项,保持title一级summary,fragmeng等配置ok。
(责任编辑:幽灵学院)
------分隔线----------------------------
一.概述 单例模式是设计模式中最简单的一种,但是它没有设计模式中的那种各种对象之间...
今天看到百度手机助手首页上的滑动效果非常nice,主要功能归结为: 1、当手指上划时,...
Android中的消息处理实例与分析摘要 本文介绍了Android中的消息处理机制,给出了Andro...
通常我们说一个系统不如另一个系统流畅,说的就是前者动画显示不如后者流畅,因此动画...
一、 JNI基础介绍JNI is the Java Native Interface. It defines a way for managed c...
今天我们自定义一个TextView,它的名称叫做RiseNumberTextView,我们在平时使用支付宝...
admin@1744.cc
工作日:9:00-21:00
周 六:9:00-18:00
&&扫一扫关注幽灵学院
广告服务:QQ:android实现收藏夹 - 下载频道 - CSDN.NET
&&&&android实现收藏夹
&android实现收藏夹
一个android收藏夹应用的实现,简单易懂,希望能对大家有所帮助。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
评价资源返积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
移动开发下载排行
积分不够下载该资源
如何快速获得积分?
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
android实现收藏夹
所需积分:2
剩余积分:
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
VIP服务公告:android中实现收藏夹功能,在线等
[问题点数:20分,结帖人zgycsmb]
android中实现收藏夹功能,在线等
[问题点数:20分,结帖人zgycsmb]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。-黄凯-基于Android的图片管理器设计与实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
-黄凯-基于Android的图片管理器设计与实现
上传于||暂无简介
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩51页未读,继续阅读
你可能喜欢

我要回帖

更多关于 android软件工程师 的文章

 

随机推荐