查看: 53|回复: 0

Delphi实现禁止与允许App截屏

[复制链接]

4

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2009-10-14
发表于 2023-5-24 15:46:00 | 显示全部楼层 |阅读模式

修改AndroidManifest.template.xml,增加下面标粗的内容:

        <activity
            android:name="com.embarcadero.firemonkey.FMXNativeActivity"
            android:exported="true"

            android:excludeFromRecents="true"
            android:noHistory="true"
            android:windowDisablePreview="true"

            android:label="%activityLabel%"
            android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
            android:launchMode="singleTask">
            <!-- Tell NativeActivity the name of our .so -->
            <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" />

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

在Form.OnCreate中增加代码:

procedure TForm16.FormCreate(Sender: TObject);
begin
  //SharedActivity.getWindow.setFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE, TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE);
  TAndroidHelper.Activity.getWindow.setFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE, TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE);//用这个写法,SharedActivity是旧版本了!


end;

要手动引用三个单元:Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers

11.3,华为、小米测试通过。

2023-05-29:

如果一个项目有多个Form,而用户只是想其中一个Form不允许截屏,那怎么办呢?

可以这样实现:

当禁止截屏的Form打开时,执行:

procedure TForm17.FormActivate(Sender: TObject);
begin
   TAndroidHelper.Activity.getWindow.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE);
end;

当关闭这个Form时再执行允许截屏的代码:

procedure TForm17.FormDeactivate(Sender: TObject);
begin
   TAndroidHelper.Activity.getWindow.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE);
end;

针对上面的代码,可以进一步提练出两个方法:

procedure EnableCaptureScreen;
begin
{$IFDEF ANDROID}
TAndroidHelper.Activity.getWindow.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE);
{$ENDIF}
end;

procedure DisableCaptureScreen;
begin
{$IFDEF ANDROID}
TAndroidHelper.Activity.getWindow.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE);
{$ENDIF}
end;

 

注意:

1.这两个方法EnableCaptureScreen与DisableCaptureScreen,不用配对调用。不管你调用几次DisableCaptureScreen,只要调用EnableCaptureScreen,就允许截屏了!

2.这两个方法可随时调用,想禁止截屏,就调用DisableCaptureScreen,想允许截屏,就调用EnableCaptureScreen。

3.TAndroidHelper.Activity.getWindow对于Delphi FMX开发的App来说,可以理解为是全局变量,也就是说,当Form1调用Form2,在Form2中执行了DisableCaptureScreen,返回Form1,这时候也是禁止截屏的。

 



来源:https://www.cnblogs.com/kinglandsoft/p/17428548.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部