当前位置:网站首页>Clock service Android implementation of alarm clock
Clock service Android implementation of alarm clock
2020-11-09 12:12:00 【osc_35cfk3ig】
ClockService Android service application realizes alarm clock
establish ClockActivity, You can enter a time ( Use Time The text box ), Create another ClockService It's used for timing , When it's time , In the Activity To give notice of ( Underneath TextView It shows that “ Time out ”).
Be careful : This is where Service operation Activity
The experimental steps : Use BoundService Way to start the service
1、 First define the layout file , I won't go over it here
3、 Define a Service Service , Then define a class MyBinder The inner class of , Used to get Service Object and the Service Object state . Methods that must be implemented in inner classes onBind Method returns MyBinder service object . Define a... In an inner class getHandler Method to get Handler Object is used for MainActivity and MyService Message passing between .
Handler The key message passing code is as follows :
4、 establish MainActivity Click events in ,
5、 Service binding needs to be created ServiceConnection Object and implement the corresponding methods , And then rewriting onServiceConnected Method to get the background Service, The code is as follows :
- Activity_main.xml Code :
<?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=" alarm clock "
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=" Start "
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=" count down "
android:textSize="100sp"></TextView>
</LinearLayout>
- MyService.java Code
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(); // Methods that must be implemented , For binding between activities and services
}
public class MyBinder extends Binder {
MyHandler handler;
public MyService getMyService() {
return MyService.this;
}
public MyHandler getHandler() {
handler=new MyHandler();// Initialize a message object
return handler; // Return the message object
}
}
public class MyHandler extends Handler {
public String[] nums;
public String str;
public String str1;
public void handleMessage(Message msg) {
str1= String.valueOf(msg.obj); // obtain MainActivity The message in
Log.d(" residue ", str1);
new Thread(new Runnable() {
@Override
public void run() {
// Start a thread
nums=str1.split(":"); // Split the obtained string into an array
// Convert the time in a string to seconds
int time1=Integer.parseInt(nums[2])+60*60*Integer.parseInt(nums[1])+60*Integer.parseInt(nums[1]);
for(int time = time1;time>=0;time--){
// adopt for A loop is a cycle of time
if(time==0){
// If the countdown to 0, Is displayed ( Time out ) word
MainActivity.textView.setText(" Time out !");
}
try {
// take time Seconds are converted back to time strings
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); // update EditText Value
Thread.sleep(1000); // Thread to sleep 1 second
} 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) {
// If no value is entered , The default filling value is obtained (Hint)
str = String.valueOf(num.getHint());
}else {
str=num.getText().toString(); // Get the input value
}
flag = 1; // Used to judge the status of the button
btnStart.setText(" Pause ");
num.setEnabled(false); // take EditText Set to non editable
intent = new Intent(MainActivity.this, MyService.class); // Create a start Service Of Intent object
bindService(intent, conn, BIND_AUTO_CREATE); // Binding specifies Service
Log.d("time", String.valueOf(str));
} else {
flag = 0;
btnStart.setText(" Start ");
myBinder.getMyService().onDestroy();
}
}
});
}
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// Set up to communicate with the service
myBinder = (MyService.MyBinder) service; // Get the... In the service MyBinder object
Message message = new Message(); // Create message object
message.obj = str; // Pass parameters ,str Is the value obtained
MyService.MyHandler handler = myBinder.getHandler(); // obtain MyService Medium Handler object
handler.sendMessage(message); // adopt Handler Object to send a message
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
}
版权声明
本文为[osc_35cfk3ig]所创,转载请带上原文链接,感谢
边栏推荐
- Method of creating flat panel simulator by Android studio
- Safety (miscellany)
- 服务应用 ClockService安卓实现闹钟
- Adobe experience design / XD 2020 software installation package (with installation tutorial)
- 从编码、网络传输、架构设计揭秘腾讯云高质量、高可用实时音视频技术实践...
- 在嵌入式设备中实现webrtc的第三种方式③
- Reread reconstruction
- Setting up a proxy for the WGet command
- Detailed explanation of [golang] GC
- 如何保证消息不被重复消费?(如何保证消息消费的幂等性)
猜你喜欢
Android NDK 开发实战 - 微信公众号二维码检测
Configure switch trunk interface traffic local priority forwarding (cluster / stack)
EFF 认为 RIAA 正在“滥用 DMCA”来关闭 YouTube-DL
FGC online service troubleshooting, this is enough!
Impact of libssl on CentOS login
10款必装软件,让Windows使用效率飞起!
天啦撸!打印日志竟然只晓得 Log4j?
微信圈子
How to query by page after 10 billion level data is divided into tables?
Fedora 33 Workstation 的新功能
随机推荐
Recommendation system, in-depth paper analysis gbdt + LR
JVM学习(五) -执行子系统
一个简单的能力,决定你是否会学习!
Wealth and freedom? Ant financial services suspended listing, valuation or decline after regulation
真正拖垮你的,是沉没成本
“开源软件供应链点亮计划 - 暑期 2020”公布结果 基于 ChubaoFS 开发的项目获得最佳质量奖
安全(杂记)
Suning's practice of large scale alarm convergence and root cause location based on Knowledge Map
How to use function framework to develop large web application
Shoes? Forecasting stock market trends? Taobao second kill? Python means what you want
Mac terminal oh my Zsh + solarized configuration
For and for... In, for each and map and for of
Git delete IML file
Visual Studio (MAC) installation process notes
Ali, Tencent, Baidu, Netease, meituan Android interview experience sharing, got Baidu, Tencent offer
Depth analysis based on synchronized lock
A simple ability determines whether you will learn!
SQL Chapter 2 Chapter 3
nodejs学习笔记(慕课网nodejs从零开发web Server博客项目)
关于无相互作用极化率的计算