这是您的解决方案,虽然很简单:)
活动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>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)