如何以编程方式锁定活动操作
Posted
技术标签:
【中文标题】如何以编程方式锁定活动操作【英文标题】:How to lock activity operations programmatically 【发布时间】:2014-09-09 04:22:30 【问题描述】:想要锁定活动操作,如果用户在 AlertDialog 中点击是,但当我点击是时似乎没有任何反应。
我正在关注this解决方案
AlertDialog.Builder alertDialog = new AlertDialog.Builder(AlertDialogActivity.this);
// Setting Dialog Title
alertDialog.setTitle("Confirm Delete...");
// Setting Dialog Message
alertDialog.setMessage("Are you sure you want delete this?");
// Setting Icon to Dialog
alertDialog.setIcon(R.drawable.delete);
// Setting Positive "Yes" Button
alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog,int which)
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(getApplicationContext(), com.example.lock.MainActivity.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
);
// Setting Negative "NO" Button
alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int which)
// Write your code here to invoke NO event
dialog.cancel();
);
// Showing Alert Message
alertDialog.show();
【问题讨论】:
1) 编辑:MainActivity.class 而不是 getApplicationContext() 2) 触摸按钮时共享日志猫消息 (onclick) 【参考方案1】:而不是给getApplicationContext()
来获取当前类的上下文给ClassName.this
【讨论】:
只是因为它引用了对话框类的上下文。并在 LogCat 的帮助下尝试检查 yes 按钮侦听器是否正在运行。【参考方案2】:使用这个。它有效:)
` 尝试在 Activity 启动时使用此标志禁用锁定屏幕。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
【讨论】:
你想禁用后退按钮?【参考方案3】:实际上,我认为这是不可能的。当然,您可以覆盖 Activity 的 onBackPressed 方法,这样用户将无法返回。您还可以设置 FullScreenMode 以向用户隐藏状态栏。但是,这很难拦截 Home 键。它是由 android 设计的,因此用户将始终能够访问主屏幕。
所以一般来说,我会推荐使用 ProgressDialog (http://developer.android.com/reference/android/app/ProgressDialog.html ),你甚至可以 setCancelable(false) 来防止它被“Back”解散。但 Home 仍会最小化您的应用并转到主屏幕。
【讨论】:
我想你还没有阅读我的问题,这就是我所知道的,我关心的是如何启用/禁用活动,用户无法按下活动中可用的按钮......【参考方案4】:似乎创建新组件可能会导致问题。 在对话框中获取上下文可能与您的想法不同。
点击此链接Hide application icon。或者编辑获取上下文的代码。
private static final ComponentName LAUNCHER_COMPONENT_NAME = new ComponentName("your.package.name", "your.package.name.Launcher");
....
getPackageManager().setComponentEnabledSetting(LAUNCHER_COMPONENT_NAME,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
【讨论】:
以上是关于如何以编程方式锁定活动操作的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift - 如何以编程方式为所有按钮分配默认操作