如何禁用电容器插件中的屏幕截图仅适用于少数页面而不适用于整个应用程序

Yas*_*een 5 java capacitor capacitor-plugin

这是一个离子电容器角度项目,我试图在其中构建一个电容器插件,以便我只能为所需的页面/屏幕禁用屏幕截图。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);在 MainActivity 内部onCreate()方法中使用过,它可以工作,但它禁用了整个应用程序的屏幕截图,这不是预期的结果。

MainAcitivity.java:

public class MainActivity extends BridgeActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

    // Initializes the Bridge
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
      // Additional plugins you've installed go here
      // Ex: add(TotallyAwesomePlugin.class);
      add(Contacts.class);
      add(Screenshot.class);
    }});
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我有电容器插件“screenshot-plugin”,其中我有两种方法可以“设置”和“清除”项目中特定页面/屏幕的标志。

截图.java:

@NativePlugin
public class Screenshot extends Plugin {

    @PluginMethod
    public void echo(PluginCall call) {
        String value = call.getString("value");

        JSObject ret = new JSObject();
        ret.put("value", value);
        call.success(ret);
    }

    @PluginMethod
    public void enableScreenshot(PluginCall call) {
        try {
            Activity activity = getBridge().getActivity();
            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
        } catch (Exception e) {
            Log.e("ABC", "Exception in enableScreenshot", e);
        }
        JSObject ret = new JSObject();
        ret.put("status", true);
        call.success(ret);
    }

    @PluginMethod
    public void disableScreenshot(PluginCall call) {
        try {
            Activity activity = getBridge().getActivity();
            activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
        } catch (Exception e) {
            Log.e("ABC", "Exception in disableScreenshot", e);
        }
        JSObject ret = new JSObject();
        ret.put("status", true);
        call.success(ret);
    }

}
Run Code Online (Sandbox Code Playgroud)

在这里我得到一个例外only thread which created the view can modify it

所以我尝试使用,MainActivity activity = new MainActivity()以便我可以getWindow()在此活动上调用方法,但是cannot resolve symbol即使在导入包时也会出现错误com.abc.myapp

此外,当我尝试getWindow()在屏幕截图插件中没有活动的情况下使用时getBridge().getActivity(),AndroidStudio 会出现编译错误,使用然后调用 getWindow() 方法(如在代码中)会消除编译错误,但给出了上述只能MainActivity这样做的异常。

我可以在 MainActivity 本身中编写这 2 个方法,但不确定如何在 ionic 项目组件中访问这些方法。

使用插件,我可以在我的组件中调用这些方法,但是如何使其仅适用于少数组件/页面/屏幕而不是整个 android 应用程序。

请帮助,提前致谢。

我知道类似的问题已经存在,但他们的用例和我的不同。

har*_*sai 0

您可以在要禁用的页面中执行以下操作:

  getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, 
  WindowManager.LayoutParams.FLAG_SECURE);
Run Code Online (Sandbox Code Playgroud)

并从您不需要的页面中删除标志:

  getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); 
Run Code Online (Sandbox Code Playgroud)

注意:不是 100% 确定,但可能会提供一些想法。