天天看点

返回键处理,back键功能类似home键

//返回键处理

 Android 改写返回键事件监听,使得back键功能类似home键,让Acitivty退至后台时不被系统销毁

现在很多程序要求back键不是退出程序而是像home键一样让Acitivty退至后台时不被系统销毁,查到的资料大多说都是继承activity的没有继承TabActivity,

TabActivity和activity不能一样处理,废话不多说了上代码。

继承activity的

    public boolean onKeyDown(int keyCode, KeyEvent event) {  

        // TODO 监听返回键,相当于点击home键  

        PackageManager pm = getPackageManager();  

        ResolveInfo homeInfo = pm.resolveActivity(  

                new Intent(Intent.ACTION_MAIN)  

                        .addCategory(Intent.CATEGORY_HOME), 0);  

        if (keyCode == KeyEvent.KEYCODE_BACK) {  

            ActivityInfo ai = homeInfo.activityInfo;  

            Intent startIntent = new Intent(Intent.ACTION_MAIN);  

            startIntent.addCategory(Intent.CATEGORY_LAUNCHER);  

            startIntent  

                    .setComponent(new ComponentName(ai.packageName, ai.name));  

            startActivitySafely(startIntent);  

            return true;  

        } else  

            return super.onKeyDown(keyCode, event);  

    }  

继承TabActivity的

@Override  

    public boolean dispatchKeyEvent(KeyEvent event) {  

        PackageManager pm = getPackageManager();  

        ResolveInfo homeInfo = pm.resolveActivity(  

                new Intent(Intent.ACTION_MAIN)  

                        .addCategory(Intent.CATEGORY_HOME), 0);  

        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK  

                && event.getAction() == KeyEvent.ACTION_DOWN) {  

            ActivityInfo ai = homeInfo.activityInfo;  

            Intent startIntent = new Intent(Intent.ACTION_MAIN);  

            startIntent.addCategory(Intent.CATEGORY_LAUNCHER);  

            startIntent  

                    .setComponent(new ComponentName(ai.packageName, ai.name));  

            startActivitySafely(startIntent);  

            return false;  

        }  

        return super.dispatchKeyEvent(event);  

    }  

private void startActivitySafely(Intent intent) {  

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  

        try {  

            startActivity(intent);  

        } catch (ActivityNotFoundException e) {  

            Toast.makeText(this, "ActivityNotFoundExceptionnull",  

                    Toast.LENGTH_SHORT).show();  

        } catch (SecurityException e) {  

            Toast.makeText(this, "SecurityExceptionnull", Toast.LENGTH_SHORT)  

                    .show();  

        }  

    }