У меня есть живые обои, которые отображают изображение. Я изменяю этот образ в активности. Затем мне нужно оповестить живые обои, чтобы он мог перезагрузить ресурсы.Launch Intent from and to the WallpaperService
Intents казался совершенным, простым, решение:
Intent intent = new Intent(MyActivity.this, MyWallpaperService.class);
startService(intent);
Я и в MyWallpaperService
@Override
public int onStartCommand (Intent intent, int flags, int startId) {...}
мне также нужно знать, в другой службе, когда пользователь нажимает на экран. Я использую тот же механизм отправки и получения намерения.
Все работает отлично на устройствах и эмуляторах Android 4.0+. Но я тестировал на Android 2.2 и 2.3.3 эмулятора и получить следующее сообщение об ошибке:
java.lang.SecurityException: Not allowed to start service Intent { cmp=com.domain.name/.liveWallpaper.MyWallpaperService } without permission android.permission.BIND_WALLPAPER
Мой манифест содержит правильный андроида: разрешение внутри тега службы:
<service
android:name=".liveWallpaper.MyWallpaperService"
android:label="@string/app_name"
android:permission="android.permission.BIND_WALLPAPER" >
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/livewallpaper_data" />
</service>
Почему я получаю это ошибка только в старых версиях (Android 2.2 и 2.3.3)? Не посылаете ли намерения в WallpaperService не рекомендуется или не рекомендуется? Имеет ли это какое-то отношение к тому факту, что только система может привязываться к службе с разрешением BIND_WALLPAPER? В конце концов, если намерения не работают, что такое альтернатива, простое решение?
Попробуйте это решение: http://stackoverflow.com/questions/20915926/communicate-with-a-wallpaperservice –
Я не думаю, что существует в WallpaperService 2,3? Я думаю, что это только после API16. Кажется, все демоверсии указывают на это. – Radu