stopService () работает только на одном устройстве - PullRequest
0 голосов
/ 03 августа 2020

Я разрабатываю потоковое приложение, и всякий раз, когда выбирается новая песня, приложение для службы, которая воспроизводит текущую песню, а затем запускает ее снова с новой песней, выбранной пользователем, однако это отлично работает на моем телефон (Moto G7 Play, Android 10), если я использую то же приложение на другом телефоне (Moto G7 Play, Android 10), то есть на другом телефоне, точно таком же, как мой, это больше не работает. Я понимаю, что проблема в том, что в другой ячейке stopService () не работает по какой-то причине, но в моей ячейке он работает, что приводит меня в замешательство, потому что как что-то может работать идеально в моей ячейке, а не в другой? Я попытался посмотреть в logcat, и он отображается одинаково на обоих телефонах, но на другом телефоне (не моем) иногда появляется сообщение о незарегистрированной службе, но все же stopService () по-прежнему не работает.

Мой код:

private boolean mBound = false;
private SimpleExoPlayer player;
private PlayerView playerView;
private PlayerControlView mPlayerControl;
private AudioPlayerService mService;
final Handler handler = new Handler();

private ServiceConnection mConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        AudioPlayerService.LocalBinder binder = (AudioPlayerService.LocalBinder) service;
        mService = binder.getService();
        mBound = true;
        inicializarExoPlayer();
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        mBound = false;
    }
};

@SuppressLint({"ClickableViewAccessibility", "CutPasteId"})
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);

    // ATTENTION: This was auto-generated to handle app links.
    Intent appLinkIntent = getIntent();
    String appLinkAction = appLinkIntent.getAction();
    Uri appLinkData = appLinkIntent.getData();
    if (appLinkIntent != null) {
        try {
            params = appLinkData.getPathSegments();
            String id = params.get(params.size() - 1);

            firebaseFirestore.collection("musicas").document(id)
                    .get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {
                    if (documentSnapshot.exists()) {
                        SharedPreferences.Editor editor = getSharedPreferences("NomeAutorForNotification", MODE_PRIVATE).edit();
                        editor.putString("link_imagem", documentSnapshot.getString("link_imagem"));
                        editor.putString("nome_musica", documentSnapshot.getString("nome_musica"));
                        editor.putString("autor_musica", documentSnapshot.getString("autor"));
                        editor.putString("id_musica", documentSnapshot.getString("music_id"));
                        editor.putString("link_musica", documentSnapshot.getString("link_musica"));
                        editor.putString("aid", documentSnapshot.getString("aid"));
                        editor.apply();
                        inicializarPlayerActivity();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(PlayerActivity.this, "Ocorreu um erro!", Toast.LENGTH_SHORT).show();
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
            inicializarPlayerActivity();
        }
    }
}

private void inicializarPlayerActivity() {
    editor = getSharedPreferences("NomeAutorForNotification", Context.MODE_PRIVATE);
    link_imagem = editor.getString("link_imagem", null);
    nome_musica = editor.getString("nome_musica", null);
    autor_musica = editor.getString("autor_musica", null);
    id_musica = editor.getString("id_musica", null);
    link_musica = editor.getString("link_musica", null);
    aid = editor.getString("aid", null);

    try {
        musicPropertiesBackup = getSharedPreferences("MusicPropertiesBackup", MODE_PRIVATE);
        link_imagem_backup = musicPropertiesBackup.getString("link_imagem", null);

        System.out.println("Link Imagem é: " + link_imagem_backup);

        if (link_imagem_backup != null && link_imagem_backup.equals(link_imagem)) {
            System.out.println("A música ecexutada é a mesma!");
            if (sharedPreferences.getString("initialize_player_before_exit", null) != null &&
                    sharedPreferences.getString("initialize_player_before_exit", null).equals("ok")) {
                inicializarNovaMusica();
            } else {
                bindService(intent, mConnection, BIND_AUTO_CREATE);
                inicializarExoPlayer();
            }
        } else {
            System.out.println("A música executada não é a mesma!");
            SharedPreferences.Editor editor = getSharedPreferences("MusicPropertiesBackup", MODE_PRIVATE).edit();
            editor.putString("link_imagem", link_imagem);
            editor.apply();
            inicializarNovaMusica();
        }

    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Não há nenhum link de backup salvo!");
        SharedPreferences.Editor editor = getSharedPreferences("MusicPropertiesBackup", MODE_PRIVATE).edit();
        editor.putString("link_imagem", link_imagem);
        editor.apply();
    }

    Picasso.get()
            .load(link_imagem)
            .into(imageMusica);

    nomeMusica.setText(nome_musica);
    autorMusica.setText(autor_musica);

    mDocUserRef = FirebaseFirestore.getInstance().collection("usuarios").document(userId)
            .collection("user_propriedades").document("propriedades").collection("favoritos")
            .document(id_musica);
    mDocUserRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            if (documentSnapshot.exists()) {
                favoriteReference = documentSnapshot.getString("music_id");
                starFav.setImageResource(R.drawable.ic_baseline_star_fav);
                fav = true;
            }
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            System.out.println("Não foi possível encontrar suas músicas favoritas");
        }
    });
}

private void inicializarExoPlayer() {
    if (mBound) {
        player = mService.getPlayerInstance();
        playerView.setPlayer(player);
        mPlayerControl.setPlayer(player);
        addToRecent();
    }
}

private void inicializarNovaMusica() {
    stopService(intent);
    bindService(intent, mConnection, BIND_AUTO_CREATE);
    Util.startForegroundService(PlayerActivity.this, intent);
    inicializarExoPlayer();
    addViews();
    SharedPreferences.Editor editor = getSharedPreferences("Preferences", MODE_PRIVATE).edit();
    editor.putString("initialize_player_before_exit", null);
    editor.apply();
}

StopService () находится в методе initializeNovaMusica (), так как он отвечает за «сброс» службы при появлении новой песни. Я не вижу ошибок в коде, не говоря уже об альтернативе, чтобы я мог решить эту проблему. Если у кого-то есть другая идея о том, как сбросить службу таким образом, чтобы она работала на всех устройствах, я соглашусь. Напомним, что приложение доступно для приложений со SKD 22 на Android.

...