Leon 1 ano atrás
pai
commit
ab16873e40

+ 1 - 0
android/app/src/main/AndroidManifest.xml

@@ -62,6 +62,7 @@
         </service>
 
         <receiver android:name=".AlarmReceiver" android:enabled="true"/>
+        <receiver android:name=".AlarmSunReceiver" android:enabled="true"/>
         <service android:name=".AlarmService" />
 <!--        <service android:name=".AlarmService" />-->
 

+ 51 - 0
android/app/src/main/java/com/hola/AlarmSunReceiver.java

@@ -0,0 +1,51 @@
+package com.hola;
+
+import static android.app.Notification.EXTRA_NOTIFICATION_ID;
+
+import android.app.AlarmManager;
+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.SystemClock;
+import android.util.Log;
+import android.widget.Toast;
+
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
+
+import java.time.Duration;
+
+public class AlarmSunReceiver extends BroadcastReceiver {
+    int count = 0;
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        String title = intent.getStringExtra("title");
+        String message = intent.getStringExtra("message");
+        String channelID = intent.getStringExtra("channelID");
+        Log.i("set alarm status:","收到推送设置");
+
+        Intent intent2 = new Intent(context, MainActivity.class);
+        int flags = PendingIntent.FLAG_UPDATE_CURRENT;
+        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
+            flags = PendingIntent.FLAG_IMMUTABLE;
+        }
+        count++;
+        PendingIntent pendingIntent = PendingIntent.getActivity(context, count, intent2, flags);
+        // 创建通知构建器
+        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelID)
+                .setSmallIcon(R.drawable.ic_stat_onesignal_default)
+                .setContentTitle(title)
+                .setContentText(message)
+                .setAutoCancel(true)
+                .setPriority(NotificationCompat.PRIORITY_HIGH)
+                .setContentIntent(pendingIntent);
+
+        int reminderId = 0;
+        // 显示通知
+        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
+        notificationManager.notify(reminderId, builder.build());
+    }
+}

+ 72 - 0
android/app/src/main/java/com/hola/HolaModule.java

@@ -129,6 +129,7 @@ public class HolaModule extends ReactContextBaseJavaModule {
     @ReactMethod
     public void clearNotification(){
         clearClockSchedule();
+        clearSunClockSchedule();
     }
 
     private void clearClockSchedule(){
@@ -159,6 +160,77 @@ public class HolaModule extends ReactContextBaseJavaModule {
 
     }
 
+    private void clearSunClockSchedule(){
+
+        int flags = PendingIntent.FLAG_UPDATE_CURRENT;
+        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
+            flags = PendingIntent.FLAG_IMMUTABLE;
+        }
+        AlarmManager alarmManager = (AlarmManager) getCurrentActivity().getSystemService(Context.ALARM_SERVICE);
+
+        //取消历史alarm
+        List<PendingIntent> allPendingIntents = new ArrayList<>();
+        for (int i = 0; i < 100; i++) {
+            int requestCode = i;
+            PendingIntent pendingIntent = PendingIntent.getBroadcast(getCurrentActivity(), i+100, new Intent(getCurrentActivity(),AlarmReceiver.class), flags);
+            if (pendingIntent != null) {
+                allPendingIntents.add(pendingIntent);
+            } else {
+                break;
+            }
+        }
+
+
+        for (PendingIntent pendingIntent : allPendingIntents) {
+            alarmManager.cancel(pendingIntent);
+            pendingIntent.cancel();
+        }
+
+    }
+
+    @ReactMethod
+    public void addSunPush(String jsonData){
+        if (getCurrentActivity()==null){
+            return;
+        }
+
+        clearSunClockSchedule();
+        AlarmManager alarmManager = (AlarmManager) getCurrentActivity().getSystemService(Context.ALARM_SERVICE);
+
+        int flags = PendingIntent.FLAG_UPDATE_CURRENT;
+        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
+            flags = PendingIntent.FLAG_IMMUTABLE;
+        }
+        try {
+            JSONArray jsonArray = new JSONArray(jsonData);
+            for (int i = 0; i < jsonArray.length(); i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String title = jsonObject.getString("title");
+                String body = jsonObject.getString("body");
+                String channelId = jsonObject.getString("channel_id");
+
+                createNotificationChannel(getCurrentActivity(),channelId);
+                Intent intent = new Intent(getCurrentActivity(), AlarmSunReceiver.class);
+                intent.putExtra("title", title);
+                intent.putExtra("message", body);
+                intent.putExtra("msg_id",i);
+                intent.putExtra("channelID",channelId);
+                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+
+                PendingIntent pendingIntent = PendingIntent.getBroadcast(
+                        getCurrentActivity(), i, intent, flags);
+
+
+                long leftMillis = toNearest1000(jsonObject.getLong("timestamp")-System.currentTimeMillis());
+                if (leftMillis>0){
+                    alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+leftMillis,pendingIntent);
+                }
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
     @ReactMethod
     public void addLocalPush(String jsonData){
         if (getCurrentActivity()==null){