当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- 技美那么贵,不如找顾问 | AALab企业顾问业务
- TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融
- Introduction to zero based im development (4): what is message timing consistency in IM systems?
- 在企业的降本增效诉求下,Cube如何助力科盾业务容器化“一步到位”?
- android studio AIDL的使用
- Program life: from Internet addicts to Microsoft, bat and byte offer harvesters
- Handwritten digital image recognition convolution neural network
- On the calculation of non interaction polarizability
- Understanding data structures starts with this article~
- Complete set of linked list operations of data structure and algorithm series (3) (go)
猜你喜欢
Vscode plug-in configuration pointing North
Python zero basics tutorial (01)
如何用函数框架快速开发大型 Web 应用 | 实战
Stack & queue (go) of data structure and algorithm series
How to ensure that messages are not consumed repeatedly? (how to ensure the idempotent of message consumption)
android studio AIDL的使用
Kubernetes business log collection and monitoring
SHOW PROFILE分析SQL语句性能开销
AI fresh student's annual salary has increased to 400000, you can still make a career change now!
为wget命令设置代理
随机推荐
块级元素和行内元素
inet_ Pton () and INET_ Detailed explanation of ntop() function
微信圈子
如何保证消息不被重复消费?(如何保证消息消费的幂等性)
Implement crud operation
Is SEO right or wrong?
Well, the four ways to query the maximum value of sliding window are good
How to use function framework to develop large web application
Large scale project Objective-C - nsurlsession access SMS verification code application example sharing
Using stream to read and write files to process large files
Glsb involves load balancing algorithm
Front end code style practice prettier + eslint + git hook + lint staged
inet_pton()和inet_ntop()函数详解
Complete set of linked list operations of data structure and algorithm series (3) (go)
Android架构之Navigation组件(二)
阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer
天啦撸!打印日志竟然只晓得 Log4j?
服务应用 ClockService安卓实现闹钟
The middle stage of vivo Monkey King activity
Stack & queue (go) of data structure and algorithm series