Android P Camera2当SD卡被拔出来自动切换到内部存储

需求: Camera2 当拔出SD卡后,设备一直提示“无法访问SD卡”,体验不好
修改方法:依据现有流程中的当内部存储空间不够时候,切换到SD的方案修改

判断提示的函数为:packages/apps/SnapdragonCamera / src/com/android/camera/CameraActivity.java

    protected long updateStorageSpace() {
        synchronized (mStorageSpaceLock) {
            mStorageSpaceBytes = Storage.getAvailableSpace();
            if (Storage.switchSavePath()) {
                mStorageSpaceBytes = Storage.getAvailableSpace();
                mMainHandler.sendEmptyMessage(SWITCH_SAVE_PATH);
            } **else if (Storage.switchInternalSavePath()) {
                mStorageSpaceBytes = Storage.getAvailableSpace();
                mMainHandler.sendEmptyMessage(SWITCH_INTERNAL_SAVE_PATH);
            }**
            return mStorageSpaceBytes;
        }
    }

其判断函数为:packages/apps/SnapdragonCamera / src/com/android/camera/Storage.java

    public static boolean switchInternalSavePath() {
        if (isSaveSDCard()
                && getInternalStorageAvailableSpace() > LOW_STORAGE_THRESHOLD_BYTES
                && getSDCardAvailableSpace() == UNKNOWN_SIZE) {
            setSaveSDCard(false);
            return true;
        }
        return false;
    }

判断SD卡的状态后,然后就是切换SD卡的存储了

    private class MainHandler extends Handler {
        public MainHandler(Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg) {
            if (msg.what == HIDE_ACTION_BAR) {
                removeMessages(HIDE_ACTION_BAR);
                CameraActivity.this.setSystemBarsVisibility(false);
            } else if ( msg.what == SWITCH_SAVE_PATH ) {
                mCurrentModule.onSwitchSavePath();
            } else if ( msg.what == SWITCH_INTERNAL_SAVE_PATH ) {
                mCurrentModule.onSwitchInternalSavePath();
            }
        }
    }

在查找器对应的实现函数接口mCurrentModule.onSwitchInternalSavePath()
packages/apps/SnapdragonCamera / src/com/android/camera/CaptureModule.java

    @Override
    public void onSwitchSavePath() {
        mSettingsManager.setValue(SettingsManager.KEY_CAMERA_SAVEPATH, "1");
        RotateTextToast.makeText(mActivity, R.string.on_switch_save_path_to_sdcard,
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSwitchInternalSavePath() {
        mSettingsManager.setValue(SettingsManager.KEY_CAMERA_SAVEPATH, "0");
        RotateTextToast.makeText(mActivity, R.string.on_switch_save_path_to_internal,
                Toast.LENGTH_SHORT).show();
    }

以上修改即可满足要求。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值