几种退出安卓应用的方式:返回桌面,弹出退出确认框,连续两次返回键退出

介绍:

      在各家app的退出机制中,一般如三种退出机制:退回桌面(实际并没有退出),弹出退出确认框,连续两次返回键退出。

实现方案:

1.退回桌面

Kotlin代码:

 override fun onBackPressed() {
        goBackToDesktop()
    }

    /**
     * 用户在主界面,按返回键直接返回桌面,而不退出
     */
    private fun goBackToDesktop() {
        val pm = packageManager
        if (null == pm) {
            finish()
            return
        }

        val homeInfo = pm!!.resolveActivity(
            Intent(Intent.ACTION_MAIN)
                .addCategory(Intent.CATEGORY_HOME), 0
        )

        if (null == homeInfo) {
            finish()
            return
        }
        val ai = homeInfo!!.activityInfo
        val startIntent = Intent(Intent.ACTION_MAIN)
        startIntent.addCategory(Intent.CATEGORY_LAUNCHER)
        startIntent.component = ComponentName(
            ai.packageName,
            ai.name
        )
        startActivitySafely(startIntent)

    }

    private fun startActivitySafely(intent: Intent) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        try {
            startActivity(intent)
        } catch (e: Exception) {
            finish()
        } catch (e: Error) {
            finish()
        }
    }

Java代码:

@Override
    public void onBackPressed() {
        goBackToDesktop();
    }

    /**
     * 用户在主界面,按返回键直接返回桌面,而不退出
     */
    private void goBackToDesktop() {
        PackageManager pm = getPackageManager();
        if (null == pm) {
            finish();
            return;
        }

        ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN)
                .addCategory(Intent.CATEGORY_HOME), 0);

        if (null == homeInfo) {
            finish();
            return;
        }
        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);

    }

    private void startActivitySafely(Intent intent) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            startActivity(intent);
        } catch (Exception e) {
            finish();
        } catch (Error e) {
            finish();
        }
    }

2.弹出退出确认框

    public void onBackPressed() {
        showExitConfirmDialog();
    }
    /**
     * 用户在主界面按返回键,会弹出退出确认框
     */
    private void showExitConfirmDialog() {
        new AlertDialog.Builder(this)
                .setTitle("确认退出")
                .setPositiveButton("确认", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                })
                .setNegativeButton("取消", null)
                .show();
    }

3.连续两次返回键退出

    private long exitTime = 0;   
    public void onBackPressed() {
        doubleBackQuit();
    }
    /**
     * 连续按两次返回键,退出应用
     */
    private void doubleBackQuit()
    {
        if (System.currentTimeMillis() - exitTime > 2000) {
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            finish();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值