Событие смены обоев

Могу ли я получить событие смены обоев в широковещательном приемнике? Мне нужно определить, изменил ли пользователь обои. Как я мог это сделать?

Я делаю следующее: у меня есть приложение, которое автоматически меняет обои. Если пользователь изменяет его вручную с помощью другого приложения, я хотел бы заметить это и спросить пользователей, хочет ли он добавить эти новые обои в список в моем приложении.


person Ton    schedule 14.05.2012    source источник
comment
Зачем вам это нужно? Это поможет людям ответить на вопросы, если вы предоставите информацию о том, чего вы пытаетесь достичь.   -  person hackbod    schedule 15.05.2012
comment
Ok. что я делаю, так это: у меня есть приложение, которое автоматически меняет обои каждый день. Если пользователь изменяет его вручную с помощью другого приложения, я хотел бы заметить это и спросить пользователей, хочет ли он добавить эти новые обои в список в моем приложении.   -  person Ton    schedule 15.05.2012


Ответы (2)


Существует только трансляция при изменении изображения обоев: http://developer.android.com/reference/android/content/Intent.html#ACTION_WALLPAPER_CHANGED

Чтобы сделать то, что вы хотите, вам понадобится больше логики, чтобы использовать это, чтобы определить, были ли изменены обои на что-то помимо изображения: http://developer.android.com/reference/android/app/WallpaperManager.html#getWallpaperInfo()

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

Также вам нужно быть предельно осторожным при использовании ACTION_WALLPAPER_CHANGED, потому что это может привести к плохому взаимодействию с другими приложениями. Вот документация для него, которая появится в следующем API:

/**
 * Broadcast Action:  The current system wallpaper has changed.  See
 * {@link android.app.WallpaperManager} for retrieving the new wallpaper.
 * This should <em>only</em> be used to determine when the wallpaper
 * has changed to show the new wallpaper to the user.  You should certainly
 * never, in response to this, change the wallpaper or other attributes of
 * it such as the suggested size.  That would be crazy, right?  You'd cause
 * all kinds of loops, especially if other apps are doing similar things,
 * right?  Of course.  So please don't do this.
 *
 * @deprecated Modern applications should use
 * {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WALLPAPER
 * WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER} to have the wallpaper
 * shown behind their UI, rather than watching for this broadcast and
 * rendering the wallpaper on their own.
 */

Правдивая история.

person hackbod    schedule 15.05.2012
comment
+1 за информацию, что новый API устарел. Теперь нет способа узнать, изменились ли обои? - person Lalith B; 19.04.2013
comment
Modern applications should use #FLAG_SHOW_WALLPAPER -- Все в порядке, если только вы не хотите размыть обои за своим приложением, так как у Android, по-видимому, нет возможности сделать это (о чем я узнал). - person RobinJ; 03.09.2014
comment
@RobinJ это именно то, что я пытаюсь сделать! Сходить с ума здесь, чтобы заставить это работать ... - person Boy; 18.12.2014
comment
@Boy github.com/RobinJ1995/be.robinj.ubuntu/blob/master/ :) В последних версиях Android, похоже, нет способа получить сигнал об изменении обоев, хотя . - person RobinJ; 18.12.2014

Я не верю, что что-то транслируется.

В WallpaperManager есть несколько геттеров, которые возвращают вам текущие обои как нарисованный. Возможно, вы могли бы сравнить текущую копию с сохраненной копией, чтобы определить, была ли она изменена. Однако, если вы используете эту функцию, чтобы обмануть пользователей, меняя обои после того, как они уже установили их, знайте, я надеюсь, что вы наступите босиком на лего в темноте.

person FoamyGuy    schedule 15.05.2012
comment
Я не думаю, что сравнение является хорошим решением. Как часто я должен сравнивать? каждую минуту? каждый час? (аккумулятор как золото). Я делаю следующее: у меня есть приложение, которое автоматически меняет обои. Если пользователь изменяет его вручную с помощью другого приложения, я хотел бы заметить это и спросить пользователей, хочет ли он добавить эти новые обои в список в моем приложении. - person Ton; 15.05.2012
comment
Я думаю, что это единственное доступное вам решение. Но также, если батарея подобна золоту, люди не будут использовать автоматическое переключение обоев... - person FoamyGuy; 15.05.2012