Ошибка приложения Android при изменении targetSDKVersion с 19 на 26
Кто -нибудь может помочь моей проблеме?
В моем предыдущем приложении для Android использовался targetSdkVersion: 19, затем я изменил на 26, но возникла проблема, подобная следующей.
Это фрагмент кода 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);
как показано здесь: намерение обслуживания должно быть явным: намерение