管灌系统巡查员智能手机App
zuoxiao
2025-02-11 dde9027478b772dd60371937413ac2838c4f3bbd
app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -1,12 +1,22 @@
package com.dayu.pipirrapp.activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
@@ -15,6 +25,7 @@
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.adapter.TabAdapter;
import com.dayu.pipirrapp.bean.db.TagBean;
import com.dayu.pipirrapp.bean.net.OrderDetailResult;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.ActivityMainBinding;
import com.dayu.pipirrapp.fragment.MapFragment;
@@ -36,11 +47,12 @@
 * 首页
 */
public class MainActivity extends AppCompatActivity {
    private static final String CHANNEL_ID = "order_channel";
    private ActivityMainBinding binding;
    private List<Fragment> fragments = new ArrayList<>();
    private long mExitTime;
    MqttManager mqttManager;
    private Map<String, String> workerIddata = new HashMap<>();
    public volatile static Map<String, String> workerIddata = new HashMap<>();
    private enum Tab {
@@ -77,16 +89,6 @@
                }
            }
        });
        //mq传来的消息
        LiveEventBus.get(CommonKeyName.MQTTData).observeForever(new Observer<Object>() {
            @Override
            public void onChanged(Object o) {
                workerIddata.put((String) o, (String) o);
                binding.redDotImg.setVisibility(View.VISIBLE);
            }
        });
        LiveEventBus.get(CommonKeyName.RedLotRefresh).observeForever(new Observer<Object>() {
            @Override
            public void onChanged(Object o) {
@@ -101,6 +103,19 @@
                        binding.redDotImg.setVisibility(View.GONE);
                    }
                }
            }
        });
        LiveEventBus.get(CommonKeyName.CreateNotification).observeForever(new Observer<Object>() {
            @Override
            public void onChanged(Object o) {
                if (o instanceof OrderDetailResult) {
                    OrderDetailResult orderDetailResult = ((OrderDetailResult) o);
                    workerIddata.put(orderDetailResult.getWorkOrderId(), orderDetailResult.getWorkOrderId());
                    binding.redDotImg.setVisibility(View.VISIBLE);
                    creatOrderNotification(orderDetailResult.getWorkOrderId().hashCode(), orderDetailResult.getTaskType(), orderDetailResult.getWorkOrderId());
                }
            }
        });
@@ -130,7 +145,7 @@
        binding.viewPager.setAdapter(adapter);
        binding.viewPager.setCurrentItem(1, false); // 默认显示地图页
        binding.viewPager.setOffscreenPageLimit(fragments.size());
        binding.viewPager.setUserInputEnabled(false);
    }
    @Override
@@ -182,7 +197,12 @@
     * 更新某个 Tab 的 UI 状态
     */
    private void updateTabUI(int position, int iconResId, int textColorResId) {
        binding.viewPager.setCurrentItem(position);
        if (position == 1) {
            binding.viewPager.setCurrentItem(position, true);
        } else {
            binding.viewPager.setCurrentItem(position, false);
        }
        switch (position) {
            case 0:
                binding.orderImg.setImageDrawable(ContextCompat.getDrawable(this, iconResId));
@@ -222,5 +242,55 @@
        NetUtils.unregisterReceiver(this);
    }
    /**
     * 创建工单提示通知
     *
     * @param notifucId
     * @param data
     */
    private void creatOrderNotification(int notifucId, String data, String workOrderId) {
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // 创建NotificationChannel(仅针对Android O及以上版本)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = getString(R.string.channel_name);
            String description = getString(R.string.channel_description);
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);
            // 注册通道
            notificationManager.createNotificationChannel(channel);
        }
        Intent notificationIntent = new Intent(this, OrderDetailActivity.class);
        notificationIntent.putExtra("workOrderId", workOrderId);
        int requestCode = workOrderId.hashCode(); // 使用workOrderId的哈希码作为requestCode
        PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_MUTABLE);
        // 创建震动效果
        // 获取 Vibrator 系统服务
        Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        long[] vibrationPattern = {0, 1000, 500, 1000}; // 震动模式:等待0ms,震动1000ms,等待500ms,震动1000ms
        int repeat = -1; // 不重复
        // 对于Android 26及以上版本,使用VibrationEffect
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            VibrationEffect effect = VibrationEffect.createWaveform(vibrationPattern, repeat);
            vibrator.vibrate(effect);
        } else {
            // 对于Android 25及以下版本,使用旧的vibrate方法
            vibrator.vibrate(vibrationPattern, repeat);
        }
        Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setContentTitle("新工单")
                .setContentText(data)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentIntent(pendingIntent)
                .setAutoCancel(true) // 点击通知后自动消失
                .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)// 使用默认的音效和震动
                .setVibrate(vibrationPattern)
                .build();
        notificationManager.notify(notifucId, notification);
    }
}