Ошибка приложения Android при изменении targetSDKVersion с 19 на 26

Кто -нибудь может помочь моей проблеме?

В моем предыдущем приложении для Android использовался targetSdkVersion: 19, затем я изменил на 26, но возникла проблема, подобная следующей.

Этот LogCat

Это фрагмент кода MusicManager.java.

  private static Intent musicIntent = new Intent("onet.BGMUSIC");

public void play() {
    if (isBgMisicEnabled()) {
        musicIntent.putExtra("bgmusic", bgMusicRes);
        ctx.startService(musicIntent);
    }
}

public void stop() {
    ctx.stopService(musicIntent);
}

Это фрагмент кода BaseActivity.java.

    public static MusicManager musicMgr = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initMusic();
}

private void initMusic() {
    if (musicMgr == null) {
        musicMgr = new MusicManager(this);
    }
    playMusic();
}

protected void playMusic() {
    if (musicMgr != null) {
        musicMgr.play();
    }
}

protected void stopMusic() {
    if (musicMgr != null) {
        musicMgr.stop();
    }
}

Это фрагмент кода WelcomeActivity.java.

    @Override
protected void playMusic() {
    if (musicMgr != null) {
        musicMgr.setBgMusicRes(R.raw.welcomebg);
        musicMgr.play();
    }
}


private void initMusicSetting() {
    ivMusic = (TextView) findViewById(R.id.music);
    setGameMusic();
    if (musicMgr != null) {
        musicMgr.setBgMisicEnabled(LevelCfg.globalCfg.isGameBgMusic());
    }
}

Это фрагмент кода Manifest.xml

        <service
        android:name="onet.sound.MusicService"
        android:exported="false" >
        <intent-filter>
            <action android:name="onet.BGMUSIC" />

            <category android:name="android.intent.category.default" />
        </intent-filter>
    </service>

2 ответа

Использование

новое намерение (это, BGMUSIC.class)

вместо

новое намерение ("onet.BGMUSIC")

Неявные намерения не являются предпочтительными в последних версиях из-за угрозы безопасности. Следовательно, вы должны использовать имена классов

Intent serviceIntent = new Intent(context,MyService.class); context.startService(serviceIntent);

Я считаю, что вы должны установить пакет заранее, как:

if (isBgMisicEnabled()) {
    musicIntent.setPackage("onet")
    musicIntent.putExtra("bgmusic", bgMusicRes);
    ctx.startService(musicIntent);
}

или создайте намерение как:

Intent musicIntent= new Intent(ctx, MusicService.class);

как показано здесь: намерение обслуживания должно быть явным: намерение

Другие вопросы по тегам