안 드 로 이 드 서비스 응용 Clock Service 알 람 기능 구현

Clock Service 안 드 로 이 드 서비스 응용 프로그램 은 알 람 을 실현 합 니 다.참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
ClockActivity 를 만 듭 니 다.시간(Time 텍스트 상자 사용)을 입력 하고 시간 을 재 는 데 사용 할 ClockService 를 만 듭 니 다.시간 이 되면 Activity 에서 알림 을 보 냅 니 다.(아래 TextView 에'시간 도착'을 표시 합 니 다.)
주의:여기 Service 작업 Activity 가 관련 되 어 있 습 니 다.



실험 절차:BoundService 방식 으로 서비스 오픈
1.먼저 레이아웃 파일 을 정의 합 니 다.여 기 는 군말 을 많이 하지 않 습 니 다.

3.Service 서비스 클래스 를 정의 한 다음 에 클래스 에서 MyBinder 의 내부 클래스 를 정의 하여 Service 대상 과 Service 대상 상 태 를 가 져 옵 니 다.내부 클래스 에서 반드시 실현 해 야 할 방법 은 onBind 방법 으로 MyBinder 서비스 대상 을 되 돌려 줍 니 다.내부 클래스 에서 getHandler 방법 을 정의 하여 Handler 대상 을 MainActivity 와 MyService 간 의 메시지 전달 에 사용 합 니 다.

Handler 메시지 전달 키 코드 는 다음 과 같 습 니 다.


4.MainActivity 의 클릭 이벤트 만 들 기

5.서비스의 바 인 딩 은 ServiceConnection 대상 을 만 들 고 해당 하 는 방법 을 실현 한 다음 에 재 작성 한 onServiceConnected 방법 에서 배경 서 비 스 를 가 져 와 야 합 니 다.코드 는 다음 과 같 습 니 다.

- Activity_main.xml 코드:

<?xml version="1.0" encoding="utf-8"?>
<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">

 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="110dp"
 android:layout_marginHorizontal="20dp"
 android:orientation="horizontal">

 <TextView
 android:layout_width="150dp"
 android:layout_height="80dp"
 android:layout_marginTop="15dp"
 android:background="@drawable/shape"
 android:gravity="center_horizontal"
 android:text="  "
 android:textAlignment="center"
 android:textSize="50sp"></TextView>

 <EditText
 android:autofillHints="true"
 android:hint="10:10:10"
 android:id="@+id/num"
 android:layout_width="match_parent"
 android:layout_height="80dp"
 android:layout_marginLeft="15dp"
 android:layout_marginTop="5dp"
 android:background="@drawable/shape"
 android:gravity="center"
 android:inputType="time"
 android:textSize="35sp"></EditText>
 </LinearLayout>

 <Button
 android:id="@+id/btnStart"
 android:layout_width="match_parent"
 android:layout_height="80dp"
 android:layout_marginHorizontal="20dp"
 android:layout_marginTop="15dp"
 android:background="@drawable/shape"
 android:text="  "
 android:textSize="50sp"></Button>

 <TextView
 android:id="@+id/text1"
 android:layout_width="match_parent"
 android:layout_height="300dp"
 android:layout_margin="20dp"
 android:background="@drawable/shape"
 android:gravity="center"
 android:text="   "
 android:textSize="100sp"></TextView>
</LinearLayout>
-MyService.java 코드

package com.example.clock;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.widget.EditText;
public class MyService extends Service {
 public MyService() {
 }
 @Override
 public IBinder onBind(Intent intent) {
 return new MyBinder(); //       ,            
 }
 public class MyBinder extends Binder {
 MyHandler handler;
 public MyService getMyService() {
 return MyService.this;
 }
 public MyHandler getHandler() {
 handler=new MyHandler();//         
 return handler; //       
 }
 }
 public class MyHandler extends Handler {
 public String[] nums;
 public String str;
 public String str1;
 public void handleMessage(Message msg) {
 str1= String.valueOf(msg.obj); //  MainActivity      
 Log.d(" ", str1);
 new Thread(new Runnable() {
 @Override
 public void run() { //      
  nums=str1.split(":"); //             
  //            
  int time1=Integer.parseInt(nums[2])+60*60*Integer.parseInt(nums[1])+60*Integer.parseInt(nums[1]);
  for(int time = time1;time>=0;time--){ //  for          
  if(time==0){ //        0,   (   )  
  MainActivity.textView.setText("   !");
  }
  try { // time           
  int hour = 0;
  int minutes = 0;
  int sencond = 0;
  int temp = time % 3600;
  if (time > 3600) {
  hour = time / 3600;
  if (temp != 0) {
   if (temp > 60) {
   minutes = temp / 60;
   if (temp % 60 != 0) {
   sencond = temp % 60;
   }
   } else {
   sencond = temp;
   }
  }
  } else {
  minutes = time / 60;
  if (time % 60 != 0) {
   sencond = time % 60;
  }
  }
  str=(hour<10?("0"+hour):hour) + ":" + (minutes<10?("0"+minutes):minutes)
   + ":" + (sencond<10?("0"+sencond):sencond);
  MainActivity.num.setText(str); //    EditText  
  Thread.sleep(1000); //    1 
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
 }
 }).start();
 }
 }

 @Override
 public void onDestroy() {
 super.onDestroy();
 }
}
MainAcivity.java

package com.example.clock;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
 MyService.MyBinder myBinder;
 public static EditText num;
 int flag = 0;
 String str;
 Intent intent;
 public static TextView textView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 textView=findViewById(R.id.text1);
 final Button btnStart = (Button) findViewById(R.id.btnStart);
 num = (EditText) findViewById(R.id.num);
 btnStart.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 if (flag == 0) {
  if (num.getText().length() < 1) { //       ,        (Hint)
  str = String.valueOf(num.getHint());
  }else {
  str=num.getText().toString(); //      
  }
  flag = 1; //        
  btnStart.setText("  ");
  num.setEnabled(false); // EditText       
  intent = new Intent(MainActivity.this, MyService.class); //    Service Intent  
  bindService(intent, conn, BIND_AUTO_CREATE); //    Service
  Log.d("time", String.valueOf(str));
 } else {
  flag = 0;
  btnStart.setText("  ");
  myBinder.getMyService().onDestroy();
 }
 }
 });
 }
 ServiceConnection conn = new ServiceConnection() {
 @Override
 public void onServiceConnected(ComponentName name, IBinder service) {//         
 myBinder = (MyService.MyBinder) service; //      MyBinder  
 Message message = new Message(); //      
 message.obj = str; //    ,str      
 MyService.MyHandler handler = myBinder.getHandler(); //  MyService  Handler  
 handler.sendMessage(message); //  Handler      
 }

 @Override
 public void onServiceDisconnected(ComponentName name) {

 }
 };
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기