Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 172 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
172
Dung lượng
7,11 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH CƠNG TRÌNH NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN ỨNG DỤNG IOT TRONG GIÁM SÁT XE THỜI GIAN THỰC VÀ PHÒNG NGỪA SỰ CỐ MÃ SỐ: SV2022-10 CHỦ NHIỆM ĐỀ TÀI: NGUYỄN HOÀNG ANH TUẤN SKC 0 Tp Hồ Chí Minh, tháng 08/2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN ỨNG DỤNG IOT TRONG GIÁM SÁT XE THỜI GIAN THỰC VÀ PHỊNG NGỪA SỰ CỐ SV2022-10 Thuộc nhóm ngành khoa học: Kĩ thuật SV thực hiện: Dân tộc: Lớp, khoa: Nguyễn Hoàng Anh Tuấn Nam, Nữ: Nam Kinh 191453B, khoa Cơ khí Động Lực Số năm đào tạo: Ngành học: Cơng nghệ Kĩ thuật Ơ tơ Người hướng dẫn: Th.s Nguyễn Thành Tuyên TP Hồ Chí Minh, 08/2022 Năm thứ: MỤC LỤC DANH MỤC BẢNG BIỂU DANH MỤC HÌNH ẢNH DANH MỤC NHỮNG TỪ VIẾT TẮT THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI MỞ ĐẦU Tổng quan tóm lược đề tài Tổng quan tình hình nghiên cứu Lý chọn đề tài 10 Đối tượng phạm vi nghiên cứu 10 Mục tiêu phương pháp nghiên cứu 11 5.1 Mục tiêu nghiên cứu 11 5.2 Phương pháp nghiên cứu 11 CHƯƠNG CƠ SỞ LÝ THUYẾT 12 1.1 Esp32 Pico Kit 12 1.2 Cảm biến độ ẩm DHT11 16 1.3 Cảm biến nồng độ CO MQ7 18 1.4 Module định vị GPS NEO M8N 19 1.5 Mạch sạc pin 3S pin Cell 18650 21 1.6 Module truyền thông CAN Bus TJA1050 24 1.7 Hệ thống Door Lock hệ thống Theft Deterrent xe Toyota Vios 2007 25 1.7.1 Cơ sở lí thuyết hệ thống Door Lock 25 1.7.2 Cơ sở lí thuyết hệ thống Theft Deterrent 28 1.8 Cơ sở lí thuyết tảng Firebase google 33 1.9 Cơ sở mạng CAN Bus 35 1.10 Các phần mềm lập trình 39 CHƯƠNG 2: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 41 2.1 Sơ đồ khối hệ thống 41 2.1.1 Yêu cầu hệ thống 41 2.1.2 Sơ đồ khối chức khối 41 2.1.3 Nguyên lí hoạt động hệ thống 43 2.2 Tính tốn, thiết kế hệ thống 47 2.2.1 Cảm biến DHT11 cảm biến MQ7 47 2.2.2 Module xác định vị trí GPS NEO M8N 51 2.2.3 Module truyền thông CAN Bus TJA1050 52 2.2.4 Khối xử lý trung tâm 55 2.2.5 Khối nguồn 59 2.2.6 Xây dựng app điện thoại 60 CHƯƠNG 3: KẾT QUẢ THỰC HIỆN 73 3.1 Kết thực nghiệm xe Toyota Vios 2007 73 3.2 Đánh giá kết 81 KẾT LUẬN VÀ ĐỀ XUẤT HƯỚNG PHÁT TRIỂN 83 Ý nghĩa khoa học 83 Đóng góp đề tài 83 Hướng phát triển đề tài 84 TÀI LIỆU THAM KHẢO 85 PHỤ LỤC 87 Phụ lục 1: Code chương trình giao tiếp nhận tín hiệu Esp32 87 Phụ lục 2: Sơ đồ mạch điện hệ thống Door Lock Theft Deterrent 92 Phụ lục 3: Thiết kế giao diện hiển thị thông tin cho app 98 DANH MỤC BẢNG BIỂU Bảng 4.1 Sơ đồ chân cảm biến nhiệt độ, độ ẩm DHT11 17 Bảng 4.2 Sơ đồ chân cảm biến chất lượng khơng khí MQ7 19 Bảng 4.3 Sơ đồ chân Module định vị GPS NEO M8N 21 Bảng 4.4 Sơ đồ chân module truyền thông CAN Bus TJA1050 25 Bảng 4.5 Sơ đồ kết nối chân cảm biến DHT11 48 Bảng 4.6 Sơ đồ kết nối chân cảm biến MQ7 50 Bảng 4.7 Sơ đồ kết nối chân module định vị GPS 52 Bảng 4.8 Sơ đồ kết nối chân Module CAN Bus TJA 1050 53 Bảng 4.9 Sơ đồ kết nối chân vi điều khiển Esp32 Node MCU 56 Bảng 4.10 Thống kê nguồn cấp dòng tiêu thụ thành phần 60 DANH MỤC HÌNH ẢNH Hình 4.1 Esp32 Pico Kit 12 Hình 4.2 Sơ đồ chân Esp32 Pico Kit 15 Hình 4.3 Cảm biến nhiệt độ, độ ẩm DHT11 17 Hình 4.4 Cảm biến chất lượng khơng khí MQ7 18 Hình 4.5 Module định vị GPS NEO M8N 20 Hình 4.6 Mạch sạc, xả bảo vệ pin 3S 40A 21 Hình 4.7 Pin Cell 18650 22 Hình 4.8 Cách nối mạch sạc, xả bảo vệ pin 3S với pin Cell 18650 23 Hình 4.9 Module truyền thơng CAN Bus TJA1050 24 Hình 4.10 Các cấu chấp hành hệ thống 26 Hình 4.11 Bố trí bên khoang động khoang hành khách 27 Hình 4.12 Bố trí bên khoang động khoang lái xe 28 Hình 4.13 Các cấu chấp hành hệ thống 29 Hình 4.14 Các cấu xác định trạng thái đóng hay mở cửa xe 30 Hình 4.15 Sơ đồ ngun lí hoạt động hệ thống chống trộm chế độ Active 32 Hình 4.16 Các điều kiện hoạt động sơ đồ nguyên lí hoạt động hệ thống chống trộm 33 Hình 4.17 Nền tảng Firebase Google 34 Hình 4.18 Sơ đồ khối hệ thống 42 Hình 4.19 Sơ đồ hoạt động định vị GPS 45 Hình 4.20 Sơ đồ nguyên lí cảm biến DHT11 48 Hình 4.21 Sơ đồ nguyên lí cảm biến MQ7 50 Hình 4.22 Sơ đồ nguyên lí module định vị GPS NEO M8N 52 Hình 4.23 Sơ đồ nguyên lí module truyền thơng CAN Bus TJA1050 53 Hình 4.24 Kết đọc CAN Bus với Esp32 cổng Serial 54 Hình 4.25 Kết sau thử lọc tín hiệu 54 Hình 4.26 Sơ đồ ngun lí Esp32 Node MCU 55 Hình 4.27 Lưu đồ thuật toán 57 Hình 4.28 Tính tốn lấy giá trị nồng độ CO từ MQ7 58 Hình 4.29 Gửi liệu cấu trúc JSON 59 Hình 4.30 Xây dựng Realtime Database để lưu trữ liệu 61 Hình 4.31 Giao diện app mục Monitoring 63 Hình 4.32 Thơng báo app nhiệt độ vượt mức cho phép 64 Hình 4.33 Giao diện đồ app 65 Hình 4.34 Giao diện app mục My Car 66 Hình 4.35 Lưu đồ thuật tốn hệ thống cảnh báo app 67 Hình 4.36 Cảnh báo xe tình trạng báo động 68 Hình 4.37 Giao diện cần mã thiết bị để đăng nhập mở app 69 Hình 4.38 Firebase Authentication quản lí tài khoản đăng ký 70 Hình 4.39 Giao diện app nhập sai Code 71 Hình 4.40 Một vài chức khác app 72 Hình 4.41 Sơ đồ kết nối mạch sản phẩm 73 Hình 4.42 Sản phẩm hoàn thiện 73 Hình 4.43 Sử dụng định vị xe app 74 Hình 4.44 Mở cửa vị trí tài xế 75 Hình 4.45 Mở cửa phía sau xe 76 Hình 4.46 Mở cửa vị trí cạnh tài xế 76 Hình 4.47 Mở cửa tài xế cửa sau lúc 77 Hình 4.48 App xe có báo động 78 Hình 4.49 Nhắc nhở chưa khóa cửa xe app 79 Hình 4.50 Khi tài xế nhận đóng cửa trở lại, thông báo xe vào chế độ cảnh báo gửi 79 Hình 4.51 Thơng báo cửa mở lúc xe chế độ cảnh báo 80 Hình 4.52 Thơng báo thiết bị kết nối 81 DANH MỤC NHỮNG TỪ VIẾT TẮT Các từ viết tắt AVR BACKGROUND CAN CPU GMAA GND GPS IOT JSON MCU NoSQL ppm PWM RAM ROM RX TX UART USB Mô tả đầy đủ Advanced Virtual RISC Background App Refresh Controller Area network Central Processing Unit Google Maps Android API Ground Global Positioning System Internet of Things JavaScript Object Notation Multipoint control unit Non SQL Part per milion Pulse-width modulation Random Access Memory Read Only Memory Receiver Transceiver Universal asynchronous receiver transmitter Universal Serial Bus BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI Thông tin chung: - Tên đề tài: Ứng dụng IOT giám sát xe thời gian thực phòng ngừa cố - Chủ nhiệm đề tài: Nguyễn Hoàng Anh Tuấn - Lớp: 191453B Mã số SV: 19145501 Khoa: Cơ khí Động Lực - Thành viên đề tài: Stt Họ tên Trần Văn Hồ Lớp MSSV 19145385 191452A Khoa Cơ khí Động Lực - Người hướng dẫn: Th.s Nguyễn Thành Tuyên Mục tiêu đề tài: Nghiên cứu, xây dựng hệ thống giám sát xe thông qua định vị GPS thu thập tín hiệu phát hiên xảy trộm cắp xe ô tô, cố… Qua đó, hệ thống nhận biết cung cấp vị trí, thơng tin đến người dùng thông qua điện thoại để kịp thời phát xử lí tình Tính sáng tạo: Có thể giám sát xe từ xa thơng qua mạng Wifi, qua dễ dàng kiểm sốt phịng ngừa cố xe Kết nghiên cứu: Hoàn thành module sản phẩm giám sát xe thông qua ứng dụng điện thoại, nhận biết tín hiệu từ cảm biến xe, tín hiệu từ xe, xác định vị trí tốc độ di chuyển xe thơng qua mạng Wifi Đóng góp mặt giáo dục đào tạo, kinh tế - xã hội, an ninh, quốc phòng khả áp dụng đề tài: myRef.child(code + "/Car").setValue(0); fuel = 0; } else { Xacnhankhoa(); } } }); myRef.child(code + "/Car").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(int.class) != null){ int fuel_connect = dataSnapshot.getValue(int.class); if ( fuel_connect == 1){ txt_fuel_connect.setText("Xe dừng"); img_fuel.setImageResource(R.drawable.on_off_red); fuel = 1; } else { txt_fuel_connect.setText("Dừng xe khẩn cấp"); img_fuel.setImageResource(R.drawable.on_off_blue); fuel = 0; } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } });*/ //read ắc quy myRef.child(code + "/acquy").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(int.class) != null){ int acquy = dataSnapshot.getValue(int.class); txt_acquy.setText(acquy + " V"); if ( acquy >= 11){ txt_acquy.setTextColor(Color.WHITE); } else { txt_acquy.setTextColor(Color.RED); } } 153 } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); //read car door driver myRef.child(code + "/Car_door/driver_door").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(int.class) != null){ driver_door = dataSnapshot.getValue(int.class); if ( driver_door == 1){ img_car_door_driver.setImageResource(R.drawable.car_unlock); } else { img_car_door_driver.setImageResource(R.drawable.lock_car); } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); //read car door passenger myRef.child(code + "/Car_door/passenger_door").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(int.class) != null){ pass_door = dataSnapshot.getValue(int.class); if ( pass_door == 1){ img_car_door_passenger.setImageResource(R.drawable.car_unlock); } else { img_car_door_passenger.setImageResource(R.drawable.lock_car); } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); 154 //read right door rear myRef.child(code + "/Car_door/right_door_rear").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(int.class) != null){ right_door = dataSnapshot.getValue(int.class); if ( right_door == 1){ img_car_right_rear_door.setImageResource(R.drawable.car_unlock); } else { img_car_right_rear_door.setImageResource(R.drawable.lock_car); } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); //read left door rear myRef.child(code + "/Car_door/left_door_rear").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(int.class) != null){ left_door = dataSnapshot.getValue(int.class); if ( left_door == 1){ img_car_left_rear_door.setImageResource(R.drawable.car_unlock); } else { img_car_left_rear_door.setImageResource(R.drawable.lock_car); } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); //read tocdo myRef.child(code + "/tocdo").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(float.class) != null){ 155 float tocdo = dataSnapshot.getValue(float.class); txt_tocdo.setText(tocdo + " km/h"); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); return mView; } private void anhxa(){ img_car_door_driver = mView.findViewById(R.id.Img_car_driver_door); img_car_door_passenger = mView.findViewById(R.id.Img_car_passenger_door); img_car_right_rear_door = mView.findViewById(R.id.Img_right_rear_door); img_car_left_rear_door = mView.findViewById(R.id.Img_left_rear_door); //img_fuel = mView.findViewById(R.id.ImageView_ngat_phun_xang); txt_acquy = mView.findViewById(R.id.TextView_acquy_history); txt_tocdo = mView.findViewById(R.id.TextView_tocdo); txt_fuel_connect = mView.findViewById(R.id.TextView_ngat_phun_xang); img_baodong = mView.findViewById(R.id.imageView); } private void Xacnhanhuychedocanhbao(){ AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); alertDialog.setTitle("Thơng báo"); alertDialog.setIcon(R.drawable.alert); alertDialog.setMessage("Bạn có muốn hủy chế độ cảnh báo khơng ?"); alertDialog.setPositiveButton("Có", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { String code = mMainActivity.getCode(); DatabaseReference myRef = FirebaseDatabase.getInstance().getReference(); myRef.child(code + "/key_warning").setValue(1); Toast.makeText(getContext(), "Đã hủy chế độ cảnh báo", Toast.LENGTH_SHORT).show(); } }); alertDialog.setNegativeButton("Không", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }); alertDialog.show(); 156 } } Sign In package com.anhtuan210501.template; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import com.anhtuan210501.template.fragment.Home_Fragment; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class signinActivity extends AppCompatActivity { private LinearLayout layout_signup; private EditText edt_email, edt_password, edt_code; private Button btn_signin; private ProgressDialog progressDialog; private LinearLayout Layout_Forgot_Pass; private String code = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signin); anhxa(); String code = edt_code.getText().toString().trim(); initListener(); Layout_Forgot_Pass.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { 157 String emailAddress = edt_email.getText().toString().trim(); if (emailAddress.isEmpty()){ Toast.makeText(signinActivity.this, "Vui lòng nhập email", Toast.LENGTH_SHORT).show(); } else { onClickForgotPass(); } } }); } private void onClickForgotPass() { progressDialog.show(); FirebaseAuth auth = FirebaseAuth.getInstance(); String emailAddress = edt_email.getText().toString().trim(); auth.sendPasswordResetEmail(emailAddress) addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { progressDialog.dismiss(); if (task.isSuccessful()) { Toast.makeText(signinActivity.this, "Xác nhận thành cơng, vui lịng kiểm tra email để đổi mật khẩu", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(signinActivity.this, "Xác nhận không thành công", Toast.LENGTH_SHORT).show(); } } }); } private void anhxa(){ layout_signup = findViewById(R.id.Layout_Signup); btn_signin = findViewById(R.id.Button_Signin); edt_email = findViewById(R.id.Edittext_Email_signin); edt_password = findViewById(R.id.Edittext_Password_signin); edt_code = findViewById(R.id.Edittext_Code_signin); progressDialog = new ProgressDialog(this); Layout_Forgot_Pass = findViewById(R.id.Layout_Forgot_password); 158 } private void initListener(){ layout_signup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(signinActivity.this, SignUpActivity.class); startActivity(intent); } }); btn_signin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onClickSignIn(); } }); } private void onClickSignIn() { String email = edt_email.getText().toString().trim(); String password = edt_password.getText().toString().trim(); String Code = edt_code.getText().toString().trim(); if (email.isEmpty() || password.isEmpty() || Code.isEmpty()){ Toast.makeText(this, "Vui lòng nhập email, mật code", Toast.LENGTH_SHORT).show(); } else { FirebaseAuth mAuth = FirebaseAuth.getInstance(); progressDialog.show(); mAuth.signInWithEmailAndPassword(email, password) addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { progressDialog.dismiss(); if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information if (mAuth.getCurrentUser().isEmailVerified()){ FirebaseUser user = mAuth.getCurrentUser(); Intent intent = new Intent(signinActivity.this, MainActivity.class); Bundle bundle = new Bundle(); bundle.putString("tendangnhap",email); bundle.putString("matkhau",password); bundle.putString("maesp",Code); intent.putExtra("data",bundle); 159 startActivity(intent); finishAffinity(); } else { Toast.makeText(signinActivity.this, "Vui lòng xác nhận email", Toast.LENGTH_SHORT).show(); } } else { // If sign in fails, display a message to the user Toast.makeText(signinActivity.this, "Đăng nhập không thành công", Toast.LENGTH_SHORT).show(); //updateUI(null); } } }); } } } Sign Up package com.anhtuan210501.template; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.anhtuan210501.template.fragment.Home_Fragment; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; 160 public class SignUpActivity extends AppCompatActivity { private EditText edtEmail, edtPass, edtMaEsp; private Button btnSignUp; private ProgressDialog progressDialog; public String PASS_CURRENT; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); anhxa(); btnSignUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onClickSignUp(); } }); } private void onClickSignUp() { String email = edtEmail.getText().toString().trim(); String password = edtPass.getText().toString().trim(); PASS_CURRENT = password; if (email.isEmpty() || password.isEmpty() ){ Toast.makeText(this, "Vui lòng nhập email mật khẩu", Toast.LENGTH_SHORT).show(); } else { FirebaseAuth mAuth = FirebaseAuth.getInstance(); progressDialog.show(); mAuth.createUserWithEmailAndPassword(email, password) addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { progressDialog.dismiss(); if (task.isSuccessful()) { mAuth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()){ Intent intent = new Intent(SignUpActivity.this, signinActivity.class); 161 startActivity(intent); finishAffinity(); Toast.makeText(SignUpActivity.this, "Đăng ký thành cơng, vui lịng xác nhận email đăng nhập", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(SignUpActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show(); } } }); } else { // If sign in fails, display a message to the user Toast.makeText(SignUpActivity.this, "Đăng ký không thành công", Toast.LENGTH_SHORT).show(); } } }); } } private void anhxa(){ edtEmail = findViewById(R.id.EditTextEmail); edtPass = findViewById(R.id.EditTextPass); btnSignUp = findViewById(R.id.ButtonSignUp); progressDialog = new ProgressDialog(this); } } Notifcation channel: package com.anhtuan210501.template; import android.app.Application; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.os.Build; public class notification extends Application { public static String CHANNEL_ID_NHIETDO = "channel nhiet do" ; public static String CHANNEL_ID_DO_AM = "channel am" ; public static String CHANNEL_ID_KHONG_KHI = "channel khong khi" ; public static String CHANNEL_ID_ACQUY = "channel acquy" ; 162 public static String CHANNEL_ID_KHOACUA = "channel khoa cua" ; public static String CHANNEL_ID_BAODONG = "channel bao dong" ; public static String CHANNEL_ID_LED = "channel led" ; public static String CHANNEL_ID_CANHBAO = "channel canh bao" ; public static String CHANNEL_ID_CHEDO = "channel che do" ; @Override public void onCreate() { super.onCreate(); createNotificationChannel(); } private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is new and not in the support library //CHANNEL NHIET DO if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_nhiet = getString(R.string.channel_nhiet_name); String description_nhiet = getString(R.string.channel_nhiet_description); int importance_nhiet = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_nhiet = new NotificationChannel(CHANNEL_ID_NHIETDO, name_nhiet, importance_nhiet); channel_nhiet.setDescription(description_nhiet); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_nhiet); } // CHANNEL DO AM if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_doam = getString(R.string.channel_doam_name); String description_doam = getString(R.string.channel_doam_description); int importance_doam = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_doam = new NotificationChannel(CHANNEL_ID_DO_AM, name_doam, importance_doam); channel_doam.setDescription(description_doam); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_doam); } // CHANNEL KHONG KHI if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_khongkhi = getString(R.string.channel_khongkhi_name); String description_khongkhi= getString(R.string.channel_khongkhi_description); int importance_khongkhi = NotificationManager.IMPORTANCE_HIGH; 163 NotificationChannel channel_khongkhi = new NotificationChannel(CHANNEL_ID_KHONG_KHI, name_khongkhi, importance_khongkhi); channel_khongkhi.setDescription(description_khongkhi); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_khongkhi); } // CHANNEL ACQUY if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_acquy = getString(R.string.channel_acquy_name); String description_acquy= getString(R.string.channel_acquy_description); int importance_acquy = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_acquy = new NotificationChannel(CHANNEL_ID_ACQUY, name_acquy, importance_acquy); channel_acquy.setDescription(description_acquy); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_acquy); } // CHANNEL KHOA CUA if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_khoacua = getString(R.string.channel_khoacua_name); String description_khoacua= getString(R.string.channel_khoacua_description); int importance_khoacua = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_khoacua = new NotificationChannel(CHANNEL_ID_KHOACUA, name_khoacua, importance_khoacua); channel_khoacua.setDescription(description_khoacua); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_khoacua); } // CHANNEL COI if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_baodong = getString(R.string.channel_baodong_name); String description_baodong= getString(R.string.channel_baodong_description); int importance_baodong = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_baodong = new NotificationChannel(CHANNEL_ID_BAODONG, name_baodong, importance_baodong); channel_baodong.setDescription(description_baodong); 164 NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_baodong); } // CHANNEL lED if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_led = getString(R.string.channel_led_name); String description_led= getString(R.string.channel_led_description); int importance_led = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_led = new NotificationChannel(CHANNEL_ID_LED, name_led, importance_led); channel_led.setDescription(description_led); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_led); } // CHANNEL CANHBAO if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_canhbao = getString(R.string.channel_canhbao_name); String description_canhbao= getString(R.string.channel_canhbao_description); int importance_canhbao= NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_canhbao = new NotificationChannel(CHANNEL_ID_CANHBAO, name_canhbao, importance_canhbao); channel_canhbao.setDescription(description_canhbao); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_canhbao); } // CHANNEL CHEDO if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name_chedo = getString(R.string.channel_chedo_name); String description_chedo = getString(R.string.channel_chedo_description); int importance_chedo= NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel_chedo = new NotificationChannel(CHANNEL_ID_CHEDO, name_chedo, importance_chedo); channel_chedo.setDescription(description_chedo); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel_chedo); } } } 165 166