我正在构建一个壁纸应用程序。 我有一个设置壁纸的按钮。 我想做的是检查壁纸是否已下载,如果是,请设置壁纸 - 如果没有,请下载并设置壁纸。
我检查是否存在带有ID(例如26748.jpg
)的文件,如果是,我成功设置了壁纸,如果它不存在,我下载它 - 但我无法设置它。 / p>
我已经设置了BroadcastReceiver:
<receiver android:name=".SinglePhotoActivity$CheckDownloadComplete">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
</intent-filter>
</receiver>
显示一条简单的已保存邮件:
public static class CheckDownloadComplete extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Saved!", Toast.LENGTH_SHORT).show();
}
}
问题在于我有两种类型的壁纸设置:一种是已下载壁纸,一种是否已下载。我做了一些研究,发现这种类型的广播接收器实际上并不包含任何意图。我唯一能做的就是在 DownloadManager的请求上设置说明,然后在onReceive
中查看说明。
因此,如果图像已经下载,我想显示一个简单的Toast。如果没有,则在下载完成后,在 onReceive 中下载并运行我的 setWallpaper 代码。
有没有更熟练的方法呢?
答案 0 :(得分:0)
检查壁纸是否已下载。
创建一个应包含至少两列的数据库表。
1.Downloaded wallpaper url
2.Downloaded image local path(from where you will set it to wallpaper)
。
每次尝试下载某个壁纸时,首先检查数据库表中url
是否已存在table
。为此,我使用sugarorm
,您可以使用任何数据库。你可以在sugarorm
中这样做。
DownloadedWallpapers mDownloadedWallpaper = null;
try {
mDownloadedWallpaper = DownloadedWallpapers.find(DownloadedWallpapers.class, "url=?", imageUrl).get(0);
} catch (Exception ex) {}
if (mDownloadedWallpaper == null)
// run your downloading code here and on download set wallpaper
else
// run set wallpaper code here
在其他数据库中,程序是相同的。只需检查db中是否存在url。
下载后发送包含本地文件路径的广播。
Intent mIntent = new Intent(context,WallpaperReceiver.class);
mIntent.putExtra("local_path", downloadedFilePath);
sendBroadcast(mIntent);
在广播接收器中运行壁纸设置代码。
对我来说,这是一个干净,有效且简单的解决方案。干杯:)