请给我一个具体的代码示例
时间: 2024-03-07 22:47:01 浏览: 240
以下是一个简单的 Android 程序锁示例,其中使用了 SharedPreferences 存储密码信息:
```java
public class AppLockService extends Service {
private List<String> lockedApps;
private String currentApp;
private String password;
@Override
public void onCreate() {
super.onCreate();
lockedApps = new ArrayList<>();
// 从 SharedPreferences 中获取需要锁定的应用程序列表和密码信息
SharedPreferences prefs = getSharedPreferences("applock", MODE_PRIVATE);
Set<String> lockedAppsSet = prefs.getStringSet("locked_apps", null);
if (lockedAppsSet != null) {
lockedApps.addAll(lockedAppsSet);
}
password = prefs.getString("password", "");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 监控当前正在运行的应用程序
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
currentApp = am.getRunningTasks(1).get(0).topActivity.getPackageName();
if (lockedApps.contains(currentApp)) {
// 当前应用程序需要锁定,启动密码验证界面
Intent lockIntent = new Intent(this, LockActivity.class);
lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(lockIntent);
}
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void setPassword(String password) {
// 设置密码,并将密码信息保存到 SharedPreferences 中
this.password = password;
SharedPreferences.Editor editor = getSharedPreferences("applock", MODE_PRIVATE).edit();
editor.putString("password", password);
editor.apply();
}
public void addLockedApp(String packageName) {
// 添加需要锁定的应用程序,并将应用程序列表保存到 SharedPreferences 中
lockedApps.add(packageName);
SharedPreferences.Editor editor = getSharedPreferences("applock", MODE_PRIVATE).edit();
editor.putStringSet("locked_apps", new HashSet<>(lockedApps));
editor.apply();
}
public void removeLockedApp(String packageName) {
// 移除需要锁定的应用程序,并将应用程序列表保存到 SharedPreferences 中
lockedApps.remove(packageName);
SharedPreferences.Editor editor = getSharedPreferences("applock", MODE_PRIVATE).edit();
editor.putStringSet("locked_apps", new HashSet<>(lockedApps));
editor.apply();
}
public boolean checkPassword(String inputPassword) {
// 检查用户输入的密码是否正确
return password.equals(inputPassword);
}
}
```
在上述示例中,`AppLockService` 是一个服务,用于监控当前正在运行的应用程序,并启动密码验证界面。密码信息和需要锁定的应用程序列表存储在 SharedPreferences 中,可以通过 `setPassword()`、`addLockedApp()` 和 `removeLockedApp()` 方法进行设置和修改。`checkPassword()` 方法用于检查用户输入的密码是否正确。
以下是一个简单的密码验证界面示例:
```java
public class LockActivity extends AppCompatActivity {
private EditText passwordEditText;
private AppLockService appLockService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lock);
passwordEditText = findViewById(R.id.password_edit_text);
appLockService = ((MyApplication) getApplication()).getAppLockService();
}
@Override
protected void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
@Override
public void onBackPressed() {
// 拦截返回键,不允许用户退出密码验证界面
}
public void onOkButtonClick(View view) {
String password = passwordEditText.getText().toString();
if (appLockService.checkPassword(password)) {
// 密码正确,允许用户访问应用程序
finish();
} else {
// 密码错误,提示用户并清空密码输入框
Toast.makeText(this, "密码错误", Toast.LENGTH_SHORT).show();
passwordEditText.setText("");
}
}
public void onForgetButtonClick(View view) {
// 提供密码忘记选项,可以通过提供预设的安全问题来重置密码
}
}
```
在上述示例中,`LockActivity` 是一个 Activity,用于显示密码验证界面。在 `onResume()` 方法中,设置了一些 Window 标志,以便在锁屏的情况下仍然可以显示界面。`onOkButtonClick()` 方法用于检查用户输入的密码是否正确,如果正确,则关闭密码验证界面;否则提示用户密码错误,并清空密码输入框。`onForgetButtonClick()` 方法提供了密码忘记选项,可以通过提供预设的安全问题来重置密码。
阅读全文