【问题标题】:How do I execute some code after one hour in background?如何在后台一小时后执行一些代码?
【发布时间】:2019-05-13 13:32:00
【问题描述】:

每当用户选择一个按钮时,我都会使用后台服务来播放音频。但我想做的是每 60 分钟播放一次音频。我该怎么做呢?

我已经尝试使用处理程序并将计时器设置为 60 分钟,然后执行播放音频的代码行,但只要用户选择按钮,它就会自动播放音频。

public class BackgroundService extends Service {

    private MediaPlayer player;
    private Boolean state = false;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        //i would like to play this audio every 60minute in the background
        player = MediaPlayer.create(BackgroundService.this, Settings.System.DEFAULT_RINGTONE_URI);

        //this will make the ringtone continuously playing
        player.setLooping(true);

        //staring the player
        player.start();

        return  START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //stopping the player when service is destroyed
        player.stop();
    }
}

【问题讨论】:

标签: java android


【解决方案1】:

BroadcastReceiver 可以实现

用你的时间间隔设置AlarmManager

Intent intent = new Intent("Your Broadcast Receiver");
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, time_interval, pendingIntent);

Manifest.xml 中指定您的BroadcastReceiver

<receiver android:name="com.package.YourReceiver">
     <intent-filter>
          <action android:name="Your Broadcast Receiver" />
     </intent-filter>
</receiver>

【讨论】:

    【解决方案2】:

    尝试循环你的处理程序

    final Handler handler = new Handler(); 
    
    
    int count = 0;
    final Runnable runnable = new Runnable() {
        public void run() { 
    
            // do the task here
            Log.d(TAG, "runn test");
    
    
            if (count++ < 5)
                //will continue to loop 5 times
                handler.postDelayed(this, 5000);
    
        } 
    }; 
    // trigger first time 
    handler.post(runnable);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多