如何以编程方式锁定活动操作

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 - 如何以编程方式为所有按钮分配默认操作

如何以编程方式获取操作栏后退按钮宽度?

如何以编程方式更改 Access 中的选项?

如果足够多的活动,boost::mutex 可以锁定操作系统吗?

我如何以编程方式锁定手机android

如何以编程方式检查大写锁定是不是打开