2017-01-20 5 views
2

Я создаю приложение для обоев. У меня есть кнопка, которая устанавливает обои. Что я хотел бы сделать, это проверить, загружены обои, если да, установите обои - если нет, загрузите и установите обои.Intent extra on широковещательный приемник WallpaperManager

Я проверяю, существует ли файл с идентификатором (например, 26748.jpg), если да, я успешно установил обои, если он не существует, я загружаю его, но я не могу его установить.

Я имею 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.

Так что, если изображение уже загружено, я бы хотел показать простой тост. Если нет, то загрузите его и после, в OnReceive после завершения загрузки запустите мой код setWallpaper.

Есть ли более опытный способ сделать это?

+1

Где вы узнали, что у вас не может быть ЭКСТРА в этом трансляторе? –

ответ

0

Проверьте, если обои уже загружены.

Создать таблицу базы данных, которая должна содержать не менее двух столбцов.

1.Downloaded wallpaper url 2.Downloaded image local path(from where you will set it to wallpaper).

Каждый раз, когда вы пытаетесь загрузить некоторые обои, сначала проверьте таблицу db, если 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 

В других базах данных процедура такая же. Просто проверьте, существует ли url в db или нет.

После загрузки отправьте широковещательную рассылку, содержащую локальный путь к файлу.

Intent mIntent = new Intent(context,WallpaperReceiver.class); 
mIntent.putExtra("local_path", downloadedFilePath); 
sendBroadcast(mIntent); 

В широковещательном приемнике запускается код установки обоев.

Для меня это чистое, рабочее и простое решение. ура :)