如何启动可重复播放声音的Android服务

时间:2019-08-20 16:11:55

标签: android audio service timer android-service

我正在设置重复提醒(声音),直到用户停止它为止。因为这必须在锁定状态下进行,所以我决定在后台使用服务。

MainActivity中,我通过以下方式启动和停止服务

startService(new Intent(MainActivity.this, MyService.class));

stopService(new Intent(MainActivity.this, MyService.class));

通过按不同的按钮-确保不要停止或启动两次。

我直接在软件电话上尝试编码,并在Android 28上通过USB尝试-一切正常,在锁定,解锁,前景,背景都可以!但是,一旦我将其发布到商店并从那里安装后,声音就不会播放。


import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

public class MyService extends Service {
    MediaPlayer mediaPlayer;
    CountDownTimer mCountDownTimer;

    private Timer timer = new Timer();

    public IBinder onBind(Intent arg0)
    {
        return null;
    }

    public void onCreate()
    {
        super.onCreate();
        startService();
    }

    private void startService()
    {
        timer.scheduleAtFixedRate(new mainTask(), 0, 15000);
    }

    private class mainTask extends TimerTask
    {
        public void run()
        {
            try {
                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.stop();
                    mediaPlayer.release();
                }
            } catch(Exception e) { e.printStackTrace(); }

            mediaPlayer = MediaPlayer.create(MyService.this, R.raw.somesound);
            mediaPlayer.setLooping(false); // Set looping
            mediaPlayer.start();
        }
    }

    public void stopService() {

    }

    public void onDestroy()
    {
        super.onDestroy();
        timer.cancel();
        timer.purge();
        Toast.makeText(this, "service stopped", Toast.LENGTH_SHORT).show();
    }

我希望能获得直接安装与商店安装所复制的相同功能。我不知道从哪里开始。

第二,我想了解为什么该服务无法在“商店”版本中产生声音,以及如何使它做到这一点。

谢谢。

0 个答案:

没有答案