안 드 로 이 드 서비스 응용 Clock Service 알 람 기능 구현
9166 단어 AndroidClockService알람시계
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) {
}
};
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.