以下是一个实现你描述的功能的示例代码:\n\njava\npublic class MainActivity extends AppCompatActivity {\n\n private static final int REQUEST_CODE_OVERLAY_PERMISSION = 1001;\n private static final int REQUEST_CODE_STORAGE_PERMISSION = 1002;\n\n private static final int MAX_ATTEMPTS = 10;\n private static final String CORRECT_PASSWORD = "123456";\n\n private TextView textViewSerial;\n private EditText editTextPassword;\n private Button buttonUnlock;\n private Button buttonClear;\n\n private int currentLevel = 0;\n private int passwordAttempts = 0;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_main);\n\n textViewSerial = findViewById(R.id.textViewGeneratedSerial);\n editTextPassword = findViewById(R.id.editTextPassword);\n buttonUnlock = findViewById(R.id.buttonUnlock);\n buttonClear = findViewById(R.id.buttonClear);\n\n // 获取悬浮窗权限\n requestOverlayPermission();\n\n // 获取存储空间权限\n requestStoragePermission();\n\n // 检查虚拟机\n if (isRunningInVirtualMachine()) {\n Toast.makeText(this, "存在虚拟机", Toast.LENGTH_SHORT).show();\n } else {\n hideSystemNotificationBar();\n }\n\n generateSerialAndPassword();\n\n buttonUnlock.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n String password = editTextPassword.getText().toString();\n if (password.equals(getCurrentPassword())) {\n if (currentLevel == 3) {\n playAudio();\n createFullScreenFloatingWindow();\n } else {\n currentLevel++;\n passwordAttempts = 0;\n generateSerialAndPassword();\n }\n } else {\n passwordAttempts++;\n if (passwordAttempts >= MAX_ATTEMPTS) {\n buttonUnlock.setEnabled(false);\n textViewSerial.setText("你已多次输入密码错误,不能进行解锁操作");\n } else {\n int remainingAttempts = MAX_ATTEMPTS - passwordAttempts;\n Toast.makeText(MainActivity.this, "还剩 " + remainingAttempts + " 次", Toast.LENGTH_SHORT).show();\n }\n }\n }\n });\n\n buttonClear.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n editTextPassword.setText("");\n }\n });\n }\n\n private void requestOverlayPermission() {\n if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {\n Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);\n intent.setData(Uri.parse("package:" + getPackageName()));\n startActivityForResult(intent, REQUEST_CODE_OVERLAY_PERMISSION);\n }\n }\n\n private void requestStoragePermission() {\n if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {\n requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_STORAGE_PERMISSION);\n }\n }\n\n private boolean isRunningInVirtualMachine() {\n return Build.FINGERPRINT.contains("generic") || Build.FINGERPRINT.contains("vbox");\n }\n\n private void hideSystemNotificationBar() {\n getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);\n }\n\n private void generateSerialAndPassword() {\n int serial = generateRandomSerial();\n String password = generateRandomPassword();\n textViewSerial.setText(String.valueOf(serial));\n editTextPassword.setText(password);\n }\n\n private int generateRandomSerial() {\n Random random = new Random();\n return random.nextInt(9) + 1;\n }\n\n private String generateRandomPassword() {\n Random random = new Random();\n int randomNum = random.nextInt(5) * 2 + 1;\n return String.valueOf(randomNum);\n }\n\n private String getCurrentPassword() {\n return String.valueOf(currentLevel * 2 + 1);\n }\n\n private void playAudio() {\n MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.b);\n mediaPlayer.start();\n }\n\n private void createFullScreenFloatingWindow() {\n // 创建全屏悬浮窗并显示图片,具体实现略\n }\n}\n\n\n请注意,这只是一个简单的示例代码,实际实现中可能需要更多的逻辑和界面布局。你需要根据自己的具体需求进行修改和完善。

Android 悬浮窗解锁 - 多层密码验证与全屏悬浮窗

原文地址: https://www.cveoy.top/t/topic/pZvj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录