android应用禁止截屏和允许截屏

本文介绍了一个Android应用程序如何通过设置窗口标志来控制截屏权限的方法。通过对Activity的生命周期回调进行管理,实现允许或禁止截屏的功能,并展示了如何使用CheckBox切换密码的显示方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends Activity implements View.OnClickListener {

    private static final String TAG = "ServiceDemo";
    private Button buttonStart;
    private Button buttonStop;
    private TextView editText1;
    private CheckBox checkBox1;

    private Window window;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Toast.makeText(this, "onCreate", Toast.LENGTH_LONG).show();
        window = getWindow();

        window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

        setContentView(R.layout.activity_main);

        editText1 =(TextView) findViewById(R.id.editText1);
        checkBox1=(CheckBox) findViewById(R.id.checkBox1);

        buttonStart = (Button) findViewById(R.id.buttonStart);
        buttonStop = (Button) findViewById(R.id.buttonStop);

        buttonStart.setOnClickListener(this);
        buttonStop.setOnClickListener(this);
    }

    public void onClick(View src) {
        switch (src.getId()) {
            case R.id.buttonStart:
                window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);

                Log.i(TAG, "allow to screenShot");
                Toast.makeText(this, "allow to screenShot", Toast.LENGTH_LONG).show();
                startService(new Intent(this, MyService.class));
                break;
            case R.id.buttonStop:
                window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
                Log.i(TAG, "ban screenShot");
                Toast.makeText(this, "ban screenShot", Toast.LENGTH_LONG).show();
                stopService(new Intent(this, MyService.class));
                break;
        }
    }

    public void onCheckedChanged(View src, boolean isChecked) {
        switch (src.getId()) {
            case R.id.checkBox1:
                if(isChecked){
                    //如果选中,显示密码
                    Toast.makeText(this, "显示密码", Toast.LENGTH_LONG).show();
                    editText1.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }else{
                    //否则隐藏密码
                    Toast.makeText(this, "隐藏密码", Toast.LENGTH_LONG).show();
                    editText1.setTransformationMethod(PasswordTransformationMethod.getInstance());
                }
                break;
        }
    }

    @Override
    public void onStart()
    {
        super.onStart();
        Toast.makeText(this, "onStart()", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onResume()
    {
        super.onResume();
        Toast.makeText(this, "onResume()", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onPause()
    {
        super.onPause();
        Toast.makeText(this, "onPause()", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onStop()
    {
        super.onStop();
        Toast.makeText(this, "onStop()", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onDestroy()
    {
        super.onDestroy();
        Toast.makeText(this, "onDestroy()", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onRestart()
    {
        super.onRestart();
        Toast.makeText(this, "onRestart()", Toast.LENGTH_LONG).show();
    }

}

 

1.在Activity的onCreate()方法的Layout初始化部分加入以下代码
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

2.如果想清楚禁止截屏:

window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);

测试结果:执行onReStart()后生效。

Android应用程序中,如果你想禁止设备的截屏声音,通常需要处理系统级别的权限事件。以下是一个简单的步骤概述: 1. **检查权限**:首先,在`AndroidManifest.xml`文件中添加`<uses-permission>`标签,请求`android.permission.REORDER_TASKS`权限,这允许应用改变任务堆栈顺序,其中包括截屏操作。 ```xml <uses-permission android:name="android.permission.REORDER_TASKS" /> ``` 2. **监听系统事件**:在Activity或Service中,你可以注册一个BroadcastReceiver来监听ACTION_SCREENSHOT意图,这是当用户试图截取屏幕系统发送的一个通知。 ```java IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREENSHOT); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 执行阻止截屏声音的操作 preventScreenshotSound(); } }; registerReceiver(receiver, filter); ``` 3. **防止声音播放**:在`preventScreenshotSound()`方法中,可以禁用音频播放,比如关闭铃声服务。请注意,这只是一个模拟示例,并非所有Android版本都支持直接控制截屏声音,所以可能需要借助第三方库或者反射来达到目的。 ```java // 只供演示,实际做法可能涉及底层API或者不可行 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); // 关闭铃声 ``` 4. **清理资源**:在不需要阻止截图声音的候,记得在合适的地方取消注册BroadcastReceiver,释放资源。 注意:这种方法可能会限制用户体验,因为截屏声音通常是提示用户屏幕已捕获的信号。在某些场景下,完全禁止可能不符合设计规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值