在WallpaperManager的广播接收器上有额外的意图

时间:2017-01-20 18:37:40

标签: java android broadcastreceiver android-wallpaper

我正在构建一个壁纸应用程序。 我有一个设置壁纸的按钮。 我想做的是检查壁纸是否已下载,如果是,请设置壁纸 - 如果没有,请下载并设置壁纸。

我检查是否存在带有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 代码。

有没有更熟练的方法呢?

1 个答案:

答案 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);

在广播接收器中运行壁纸设置代码。

对我来说,这是一个干净,有效且简单的解决方案。干杯:)