Untitled
unknown
plain_text
a year ago
9.4 kB
5
Indexable
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.INTERNET" /> <service android:name=".TemperatureMonitoringService" android:enabled="true" android:exported="false" /> <!-- <service--> <!-- android:name=".AlarmReciver"--> <!-- android:enabled="true"--> <!-- android:exported="false" />--> <receiver android:name=".TemperatureCheckReceiver" android:exported="false"/> package com.example.home; import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Handler; import android.os.IBinder; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; public class TemperatureMonitoringService extends Service { private static final int TEMPERATURE_THRESHOLD = 40; private Handler handler; private static final int NOTIFICATION_ID = 1; private static final String CHANNEL_ID = "default_channel_id"; private static final int ALARM_INTERVAL = 10 * 1000; // 10s @Override public void onCreate() { super.onCreate(); handler = new Handler(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // Thực hiện kiểm tra nhiệt độ định kỳ mỗi 10s startTemperatureCheckAlarm(); handler.postDelayed(new Runnable() { @Override public void run() { // Đọc nhiệt độ từ Firebase Realtime Database // Kiểm tra nhiệt độ và gửi thông báo nếu cần // Sử dụng NotificationManager để gửi thông báo FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference temperatureRef = database.getReference("TEM"); // Đọc giá trị nhiệt độ từ Firebase temperatureRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // Lấy giá trị nhiệt độ từ dataSnapshot double temperature = dataSnapshot.getValue(Double.class); // Kiểm tra nhiệt độ và gửi thông báo nếu vượt quá 40 độ if (temperature > TEMPERATURE_THRESHOLD) { sendNotification("Nhiệt độ vượt quá 40 độ!"); } } } @Override public void onCancelled(DatabaseError databaseError) { // Xử lý lỗi nếu cần } }); // Tiếp tục kiểm tra sau một khoảng thời gian handler.postDelayed(this, ALARM_INTERVAL); // Kiểm tra mỗi 10s } }, 0); return START_STICKY; } private void startTemperatureCheckAlarm() { AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, TemperatureCheckReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); // Cấu hình AlarmManager để kiểm tra mỗi 10 giây long triggerAtMillis = System.currentTimeMillis() + ALARM_INTERVAL; // Lập lịch cho việc kiểm tra nhiệt độ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent); } else { alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent); } } private void sendNotification(String message) { // Tạo thông báo NotificationManager notificationManager = getSystemService(NotificationManager.class); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "Default Channel", NotificationManager.IMPORTANCE_DEFAULT); notificationManager.createNotificationChannel(channel); } Intent intent = new Intent(this, MainActivity.class); // Thay YourMainActivity bằng Activity chính của bạn PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); Notification notification = new Notification.Builder(this, CHANNEL_ID) .setContentTitle("Thông báo nhiệt độ") .setContentText(message) .setSmallIcon(R.drawable.ic_notification) .setContentIntent(pendingIntent) .setAutoCancel(true) .build(); // Hiển thị thông báo notificationManager.notify(NOTIFICATION_ID, notification); } @Override public IBinder onBind(Intent intent) { return null; } } package com.example.home; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Handler; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; public class TemperatureCheckReceiver extends BroadcastReceiver { private static final int TEMPERATURE_THRESHOLD = 40; private static final int NOTIFICATION_ID = 1; private static final String CHANNEL_ID = "default_channel_id"; @Override public void onReceive(Context context, Intent intent) { // Đọc nhiệt độ từ Firebase Realtime Database // Kiểm tra nhiệt độ và gửi thông báo nếu cần // Sử dụng NotificationManager để gửi thông báo FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference temperatureRef = database.getReference("TEM"); temperatureRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // Lấy giá trị nhiệt độ từ dataSnapshot double temperature = dataSnapshot.getValue(Double.class); // Kiểm tra nhiệt độ và gửi thông báo nếu vượt quá 40 độ if (temperature > TEMPERATURE_THRESHOLD) { sendNotification(context, "Nhiệt độ vượt quá 40 độ!"); } } } @Override public void onCancelled(DatabaseError databaseError) { // Xử lý lỗi nếu cần } }); } private void sendNotification(Context context, String message) { // Tạo thông báo NotificationManager notificationManager = context.getSystemService(NotificationManager.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "Default Channel", NotificationManager.IMPORTANCE_DEFAULT); notificationManager.createNotificationChannel(channel); } Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); Notification notification = new Notification.Builder(context, CHANNEL_ID) .setContentTitle("Thông báo nhiệt độ") .setContentText(message) .setSmallIcon(R.drawable.ic_notification) .setContentIntent(pendingIntent) .setAutoCancel(true) .build(); // Hiển thị thông báo notificationManager.notify(NOTIFICATION_ID, notification); } } Intent serviceIntent = new Intent(this, TemperatureMonitoringService.class); startService(serviceIntent);
Editor is loading...