flutter 屏幕常亮插件 Screen 适配nullsafe

406 阅读1分钟

首先从git 上将代码克隆或者下载下来

第一步:

github.com/clovisnicol… 下载源码

cmd 或者 mac 终端

git clone https://github.com/clovisnicolas/flutter_screen.git

第二步:

找到 插件的 pubspec.yaml , 找到sdk 版本号进行如下设置

 environment:
    sdk: ">=2.12.0 <3.0.0"

第三步: 修改 ScreenPlugin.java 代码

将下面代码替换原有文件中的Java 代码

package flutter.plugins.screen.screen;
import android.os.Bundle;
import androidx.annotation.NonNull;
import android.app.Activity;
import android.app.Application;
import android.provider.Settings;
import android.view.WindowManager;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.BinaryMessenger;

public class ScreenPlugin implements FlutterPlugin, MethodChannel.MethodCallHandler {

    private MethodChannel mMethodChannel;

   private Activity mActivity;

   private  Application mApplication;

   @Override
   public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
      mMethodChannel = new MethodChannel(binding.getBinaryMessenger(), "github.com/clovisnicolas/flutter_screen");
      mMethodChannel.setMethodCallHandler(this);
      initApplicationCallBack((Application) binding.getApplicationContext());
   }
   @Override
   public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {

   }

   public  void  initApplicationCallBack(Application application){
      mApplication = application;
      /// 这里监听acvitity生命周期来获取 activity
      application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
         @Override
         public void onActivityCreated(Activity activity, Bundle bundle) {
            mActivity = activity;
         }
         @Override
         public void onActivityStarted(Activity activity) {
//          onstarted
         }
         @Override
         public void onActivityResumed(Activity activity) {
//          onActivityResumed
         }
         @Override
         public void onActivityPaused(Activity activity) {
//          onActivityPaused
         }
         @Override
         public void onActivityStopped(Activity activity) {
//          onActivityStopped
         }
         @Override
         public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
//          onActivitySaveInstanceState
         }
         @Override
         public void onActivityDestroyed(Activity act) {
            if (act == mActivity) {
               /// 注销监听
               mApplication.unregisterActivityLifecycleCallbacks(this);
            }
         }
      });
   }


   @Override
   public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
    switch(call.method){
      case "brightness":
        result.success(getBrightness());
        break;
      case "setBrightness":
        double brightness = call.argument("brightness");
        WindowManager.LayoutParams layoutParams = mActivity.getWindow().getAttributes();
        layoutParams.screenBrightness = (float)brightness;
        mActivity.getWindow().setAttributes(layoutParams);
        result.success(null);
        break;
      case "isKeptOn":
        int flags =mActivity.getWindow().getAttributes().flags;
        result.success((flags & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0) ;
        break;
      case "keepOn":
        Boolean on = call.argument("on");
        if (on) {
          System.out.println("Keeping screen on ");
         mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        }
        else{
          System.out.println("Not keeping screen on");
         mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        }
        result.success(null);
        break;

      default:
        result.notImplemented();
        break;
    }
  }


   private float getBrightness(){
    float result = mActivity.getWindow().getAttributes().screenBrightness;
    if (result < 0) { // the application is using the system brightness
      try {
        result = Settings.System.getInt(mActivity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS) / (float)255;
      } catch (Settings.SettingNotFoundException e) {
        result = 1.0f;
        e.printStackTrace();
      }
    }
    return result;
  }
}

第四步: 导入工程 即可。