package com.info.sn.service; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Color; import android.graphics.PixelFormat; import android.os.Build; import android.os.IBinder; import android.provider.Settings; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.Button; import android.widget.TextView; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.info.sn.KeepAliveConnection; import com.info.sn.R; import com.info.sn.bean.BaseResponse; import com.info.sn.network.HTTPInterface; import com.info.sn.network.NetWorkManager; import com.info.sn.network.api.ScreenLock; import com.info.sn.utils.SPUtils; import com.info.sn.utils.TimeUtils; import com.info.sn.utils.Utils; import cn.jpush.android.api.JPushInterface; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; public class InitJpushServer extends Service { public InitJpushServer() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. // throw new UnsupportedOperationException("Not yet implemented"); return new KeepAliveConnection.Stub() { }; } @Override public void onCreate() { super.onCreate(); registReceiver(); registerTimeReceiver(); } @Override public void onDestroy() { super.onDestroy(); if (null != mTimeChangedReceiver) { unregisterReceiver(mTimeChangedReceiver); } if (null != lockScreenReceiver) { unregisterReceiver(lockScreenReceiver); } } @Override public int onStartCommand(Intent intent, int flags, int startId) { JPushInterface.init(this); // HTTPInterface.checkDevicesInfo(InitJpushServer.this); HTTPInterface.getAllappPackage(InitJpushServer.this); HTTPInterface.getForceInstall(InitJpushServer.this); HTTPInterface.checkUpdate(InitJpushServer.this); HTTPInterface.checkUpdate(InitJpushServer.this, "com.appstore.uiui"); getScreenLockState(); HTTPInterface.getTimeControl(InitJpushServer.this); return START_STICKY; } private void getScreenLockState() { ScreenLock getScreenLock = NetWorkManager.getScreenLockControl(); getScreenLock.getScreenshot(Utils.getSerial()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(BaseResponse baseResponse) { int code = baseResponse.code; if (code == 200) { JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data); int is_screen_lock = jsonObject.getInteger("is_screen_lock"); if (is_screen_lock == 1) { if (!timelocked) { showFloatingWindow("屏幕已锁定"); } screenlocked = true; SPUtils.put(InitJpushServer.this, LOCK_STATE, 1); } else { if (!timelocked) { hideFloatingWindow(); } screenlocked = false; SPUtils.put(InitJpushServer.this, LOCK_STATE, 0); } } else { if (!timelocked) { hideFloatingWindow(); } screenlocked = false; SPUtils.put(InitJpushServer.this, LOCK_STATE, 0); } } @Override public void onError(Throwable e) { Log.e("getScreenLockState", "onError: " + e.getMessage()); int is_screen_lock = (int) SPUtils.get(InitJpushServer.this, LOCK_STATE, 0); if (is_screen_lock == 1) { if (!timelocked) { showFloatingWindow("屏幕已锁定"); } screenlocked = true; } else { if (!timelocked) { hideFloatingWindow(); } screenlocked = false; } } @Override public void onComplete() { } }); } private static WindowManager windowManager; private View topView; boolean screenlocked = false; boolean timelocked = false; private static final String LOCK_STATE = "SCRENN_LOOCKED_STATE"; private void showFloatingWindow(String name) { if (Settings.canDrawOverlays(this)) { // 获取WindowManager服务 if (null == windowManager) { windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); } DisplayMetrics dm = new DisplayMetrics(); windowManager.getDefaultDisplay().getRealMetrics(dm); int width = dm.widthPixels; // 屏幕宽度(像素) int height = dm.heightPixels; // 屏幕高度(像素) // 新建悬浮窗控件 final Button button = new Button(getApplicationContext()); button.setText("霸屏测试"); button.setAlpha(0.9f); button.setBackgroundColor(Color.WHITE); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // windowManager.removeView(button); } }); if (null == topView) { topView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_screen_lock, null); TextView textView = topView.findViewById(R.id.textView); textView.setText(name); } else { if (topView.getTag().equals("added")) { TextView textView = topView.findViewById(R.id.textView); textView.setText(name); return; } } // topView.setAlpha(0.8f); // 设置LayoutParam WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { layoutParams.type = WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; //TYPE_SYSTEM_OVERLAY可以下滑通知栏 // layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; } else { layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE; } layoutParams.flags |= WindowManager.LayoutParams.FLAG_BLUR_BEHIND | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; layoutParams.format = PixelFormat.RGBA_8888; layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; //systemUiVisibility 关闭通知栏和导航栏 layoutParams.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; layoutParams.x = 0; layoutParams.y = 0; // 将悬浮窗控件添加到WindowManager windowManager.addView(topView, layoutParams); topView.setTag("added"); } } private void hideFloatingWindow() { if (null == windowManager) { return; } if (null != topView) { windowManager.removeView(topView); topView = null; } } private LockScreenReceiver lockScreenReceiver; private void registReceiver() { if (null == lockScreenReceiver) { lockScreenReceiver = new LockScreenReceiver(); IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); filter.addAction(LockScreenReceiver.ACTION_LOCK); filter.addAction(LockScreenReceiver.ACTION_UNLOCK); registerReceiver(lockScreenReceiver, filter); } } public class LockScreenReceiver extends BroadcastReceiver { public static final String ACTION_LOCK = "LockScreenReceiver_lockscreen"; public static final String ACTION_UNLOCK = "LockScreenReceiver_unlockscreen"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (TextUtils.isEmpty(action)) { getScreenLockState(); return; } if (ACTION_LOCK.equals(action)) { // String name = intent.getStringExtra("name"); String name = "屏幕已锁定"; if (!timelocked) { showFloatingWindow(name); } screenlocked = true; } else if (ACTION_UNLOCK.equals(action)) { if (!timelocked) { hideFloatingWindow(); } screenlocked = false; } } } private TimeChangedReceiver mTimeChangedReceiver; //监听时间和日期变化 public void registerTimeReceiver() { mTimeChangedReceiver = new TimeChangedReceiver(); IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); filter.addAction(Intent.ACTION_DATE_CHANGED); filter.addAction(Intent.ACTION_TIME_CHANGED); filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); filter.addAction(Intent.ACTION_TIME_TICK); filter.addAction(TimeChangedReceiver.ACTION_UPDATE); registerReceiver(mTimeChangedReceiver, filter); } public class TimeChangedReceiver extends BroadcastReceiver { public static final String ACTION_UPDATE = "TimeChangedReceiver_update"; @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) { Log.e("fht", "TimeChangedReceiver:" + "data changed"); } else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) { Log.e("fht", "TimeChangedReceiver:" + "time changed"); } else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) { Log.e("fht", "TimeChangedReceiver:" + "timezone changed"); } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) { Log.e("fht", "TimeChangedReceiver:" + "time tick"); } else if (ACTION_UPDATE.equals(intent.getAction())) { Log.e("fht", "TimeChangedReceiver:" + "date update"); } long nowTime = System.currentTimeMillis(); TimeUtils.ContralTime contralTime = TimeUtils.getDefaltContralTime(InitJpushServer.this); if (null != contralTime) { if (contralTime.inControlTime(nowTime)) { if (!screenlocked) { showFloatingWindow("管控时间:" + contralTime.toString()); } else { TextView textView = topView.findViewById(R.id.textView); textView.setText("管控时间:" + contralTime.toString()); } timelocked = true; } else { getScreenLockState(); if (!screenlocked) { hideFloatingWindow(); } timelocked = false; } } else { if (!screenlocked) { hideFloatingWindow(); } getScreenLockState(); timelocked = false; } // String packages = ForegroundAppUtil.getForegroundPackageName(context); // if (!packages.equals("com.estrongs.android.pop")) { // ApkUtils.openApp(context, "com.estrongs.android.pop"); // } // Log.e("TimeChangedReceiver", "packages:" + packages); } } }