Как правильно запустить сервис из TileService (QS_Tile)?
Делаю приложение для прослушивания музыки, включение/выключение осуществляется через "шторку", TileService. Код тайла до примитивного прост:
ublic void onClick(){
super.onClick();
Tile t=getQsTile();
if(!PlaybackService.isPlay){
t.setState(Tile.STATE_ACTIVE);
PlaybackService.startPlayback(this,null);
} else {
t.setState(Tile.STATE_INACTIVE);
PlaybackService.stopPlayback(this);
}
t.updateTile();
}
Берем значение статичной переменной, и в зависимости от него, дергаем статические методы. Так как мы это делаем из тайлика, то все это происходит в контексте шторки, если я правильно понимаю.
В свою очередь, код PlaybackService:
public static void startPlayback(Context ctx, String filename) {
Intent me=new Intent(ctx.getApplicationContext(),PlaybackService.class);
me.putExtra("what",filename);
ctx.startForegroundService(me);
}
Здесь мы из контекста тайлика получаем контекст приложения, и уже от него запускаем сервис.
Если приложение уже запущено, то все отлично работает. Если устройство перезагрузить и после этого нажать на иконку, получается падение. Так как сервис к тому же еще и СТИКИ, то падает оно много раз к ряду. Где именно падает сказать сложно, так как вызов уходит в NDK и сегфолтится уже где-то там. Дебажить нативную часть сложно, особенно потому, что она работает уже не первый год, что ему там не нравится мне понять сложно.
Я предполагаю, что приложению нехватает каких-то прав или оно сталкивается с какими-то ограничениями в нативной части и падает. Вероятно, что это как-то связано с контекстом запуска, но я не могу понять, куда именно копать. Особенно мне непонятно, где стартует сервис, если по идее, статический startPlayback выполняется в контексте шторки. Добавить сервису отдельный процесс? Но тогда этот же процесс надо будет добавлять всем активити...