Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中禁用主页按钮单击_Android_Android Keypad_Android Securityexception - Fatal编程技术网

如何在android中禁用主页按钮单击

如何在android中禁用主页按钮单击,android,android-keypad,android-securityexception,Android,Android Keypad,Android Securityexception,我是android新手。我正在创建一个锁屏应用程序。在我的应用程序中,我想禁用所有外部键,如Home键、Back键。。我已使用以下命令禁用了Back键: @Override public void onBackPressed() { return; // Do nothing! } 但是我在Stack Overflow中引用了很多站点和问题来禁用我应用程序中的Home键。但什么都没用。 我的应用程序正在API 16上运行。。请帮帮我。任何帮助都将不胜感激 非常感谢您的建议我建议

我是android新手。我正在创建一个锁屏应用程序。在我的应用程序中,我想禁用所有外部键,如Home键、Back键。。我已使用以下命令禁用了Back键:

@Override
public void onBackPressed() {
    return;
    // Do nothing!
}
但是我在Stack Overflow中引用了很多站点和问题来禁用我应用程序中的Home键。但什么都没用。 我的应用程序正在API 16上运行。。请帮帮我。任何帮助都将不胜感激

非常感谢您的建议

我建议您阅读:

禁用主页按钮,并在新应用程序打开时进行检测

由于安卓4没有有效的方法来关闭家庭 按钮这就是我们需要另一个小黑客的原因。一般来说 这样做的目的是检测新应用程序何时出现在前台和后台 立即重新启动您的活动

首先创建一个名为KioskService的类,该类扩展服务和 添加以下代码段:

public class KioskService extends Service {
    private static final long INTERVAL = TimeUnit.SECONDS.toMillis(2); // periodic interval to check in seconds -> 2 seconds
    private static final String TAG = KioskService.class.getSimpleName();
    private static final String PREF_KIOSK_MODE = "pref_kiosk_mode";

    private Thread t = null;
    private Context ctx = null;
    private boolean running = false;

    @Override
    public void onDestroy() {
        Log.i(TAG, "Stopping service 'KioskService'");
        running =false;
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "Starting service 'KioskService'");
        running = true;
        ctx = this;

        // start a thread that periodically checks if your app is in the foreground
        t = new Thread(new Runnable() {
            @Override
            public void run() {
                do {
                    handleKioskMode();
                    try {
                        Thread.sleep(INTERVAL);
                    } catch (InterruptedException e) {
                        Log.i(TAG, "Thread interrupted: 'KioskService'");
                    }
                }while(running);
                stopSelf();
            }
        });

        t.start();
        return Service.START_NOT_STICKY;
    }

    private void handleKioskMode() {
        // is Kiosk Mode active? 
            if(isKioskModeActive()) {
                // is App in background?
            if(isInBackground()) {
                restoreApp(); // restore!
            }
        }
    }

    private boolean isInBackground() {
        ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);

        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
        return (!ctx.getApplicationContext().getPackageName().equals(componentInfo.getPackageName()));
    }

    private void restoreApp() {
        // Restart activity
        Intent i = new Intent(ctx, MyActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ctx.startActivity(i);
    }

    public boolean isKioskModeActive(final Context context) {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
        return sp.getBoolean(PREF_KIOSK_MODE, false);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
最后,添加服务声明和检索权限 将前台进程添加到清单:

<service android:name=".KioskService" android:exported="false"/>

<uses-permission android:name="android.permission.GET_TASKS"/>

基本上,线程每两秒钟检查一次应用程序是否正确 在前台运行。如果没有,线程将立即重新创建 你的活动

这对你有帮助吗
<service android:name=".KioskService" android:exported="false"/>

<uses-permission android:name="android.permission.GET_TASKS"/>