Слушатель для audioManager.isMusicActive - PullRequest
0 голосов
/ 20 мая 2018

Как я могу слушать, когда играет музыка из других приложений, а когда нет?

Мой код был:

if (audioManager.isMusicActive()) {
        musicontrolIcon.setImageResource(R.drawable.ic_pause_circle);
        musicontrolIcon.setOnClickListener(pauseMusic);
    } else {
        musicontrolIcon.setImageResource(R.drawable.ic_play_circle);
        musicontrolIcon.setOnClickListener(playMusic);
    }

Но он проверяется только один раз.

1 Ответ

0 голосов
/ 20 мая 2018

Попробуйте использовать JobScheduler. Запланируйте задание, которое проверяет наличие isMusicActive() каждые 5 секунд (или согласно вашему требованию).Вот как вы можете это сделать: -

import android.app.job.JobParameters;
import android.app.job.JobService;
import android.util.Log;

public class JobSchedulerService extends JobService {
    private static final String TAG = "JobSchedulerService";
    @Override
    public boolean onStartJob(JobParameters params) {
        Log.i(TAG, "onStartJob:");
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.i(TAG, "onStopJob:");
        return false;
    }

}

AndroidManifest

<service android:name=".JobSchedulerService"
         android:permission="android.permission.BIND_JOB_SERVICE"
         android:exported="true"/>

Создание объектов планировщика

import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    JobScheduler mJobScheduler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "onCreate: ");

        mJobScheduler = (JobScheduler)
                getSystemService(Context.JOB_SCHEDULER_SERVICE);
        JobInfo.Builder builder = new JobInfo.Builder(1,
                new ComponentName(getPackageName(),
                        JobSchedulerService.class.getName()));
        builder.setPeriodic(3000);
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);

        if (mJobScheduler.schedule(builder.build()) <= 0) {
            Log.e(TAG, "onCreate: Some error while scheduling the job");
        }

    }
}
...