如何设置ServiceStartForeground使其正常运行CountDownTimer

如何设置ServiceStartForeground使其正常运行CountDownTimer,第1张

如何设置Service / StartForeground使其正常运行CountDownTimer

这是您的解决方案,虽然很简单:)

活动xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="in.ashish29agre.stackoverflow.sample.servicetimer.ServiceTimerActivity">    <TextView        android:id="@+id/status_tv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:padding="16dp"        android:text="TImer will start here" />    <Button        android:id="@+id/start_btn"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="startService"        android:text="Start" />    <Button        android:id="@+id/stop_btn"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="stopService"        android:text="Stop" /></LinearLayout>

Java代码

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;import in.ashish29agre.stackoverflow.R;public class ServiceTimerActivity extends AppCompatActivity {    TextView textViewTime;    private TimerStatusReceiver receiver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_service_timer);        textViewTime = (TextView) findViewById(R.id.status_tv);        receiver = new TimerStatusReceiver();    }    @Override    protected void onResume() {        super.onResume();        LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter(CountdownTimerService.TIME_INFO));    }    @Override    protected void onPause() {        super.onPause();        LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);    }    public void startService(View view) {        Intent intent = new Intent(this, CountdownTimerService.class);        startService(intent);    }    public void stopService(View view) {        Intent intent = new Intent(this, CountdownTimerService.class);        stopService(intent);    }    private class TimerStatusReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) { if (intent != null && intent.getAction().equals(CountdownTimerService.TIME_INFO)) {     if (intent.hasExtra("VALUE")) {         textViewTime.setText(intent.getStringExtra("VALUE"));     } }        }    }}

服务代码

import android.app.Notification;import android.app.PendingIntent;import android.app.Service;import android.content.Intent;import android.os.CountDownTimer;import android.os.IBinder;import android.support.annotation.Nullable;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.NotificationCompat;import java.util.concurrent.TimeUnit;import in.ashish29agre.stackoverflow.R;public class CountdownTimerService extends Service {    public static final String TIME_INFO = "time_info";    private CounterClass timer;    @Override    public void onCreate() {        super.onCreate();    }    @Nullable    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        timer = new CounterClass(90000, 1000);        timer.start();        Intent notificationIntent = new Intent(this, ServiceTimerActivity.class);        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,     notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);        Notification notification = new NotificationCompat.Builder(this)     .setSmallIcon(R.drawable.ic_launcher)     .setContentText("Counter down service")     .setContentIntent(pendingIntent).build();        startForeground(101, notification);        return START_NOT_STICKY;    }    @Override    public void onDestroy() {        timer.cancel();        super.onDestroy();        Intent timerInfoIntent = new Intent(TIME_INFO);        timerInfoIntent.putExtra("VALUE", "Stopped");        LocalBroadcastManager.getInstance(CountdownTimerService.this).sendBroadcast(timerInfoIntent);    }    public class CounterClass extends CountDownTimer {        public CounterClass(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval);        }        @Override        public void onTick(long millisUntilFinished) { long millis = millisUntilFinished; String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),         TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),         TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); System.out.println(hms); Intent timerInfoIntent = new Intent(TIME_INFO); timerInfoIntent.putExtra("VALUE", hms); LocalBroadcastManager.getInstance(CountdownTimerService.this).sendBroadcast(timerInfoIntent);        }        @Override        public void onFinish() { Intent timerInfoIntent = new Intent(TIME_INFO); timerInfoIntent.putExtra("VALUE", "Completed"); LocalBroadcastManager.getInstance(CountdownTimerService.this).sendBroadcast(timerInfoIntent);        }    }}

忘了需要在清单中添加服务

 <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <service android:name=".sample.servicetimer.CountdownTimerService" />    </application>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506852.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存