Как правильно запустить сервис из 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 выполняется в контексте шторки. Добавить сервису отдельный процесс? Но тогда этот же процесс надо будет добавлять всем активити...


Ответы (0 шт):