Как я могу завершить деятельность после захвата скриншота просмотра? - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно закрыть активность скриншотом подпредставления.

Вот мои фрагменты кода:

private void returnBackWithSavedImage() {
    int permissionCheck = PermissionChecker.checkCallingOrSelfPermission(this,
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
        // Hide top/bottom sub views
        updateView(View.GONE);
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
        parentImageRelativeLayout.setLayoutParams(layoutParams);
        new CountDownTimer(1000, 500) {
            public void onTick(long millisUntilFinished) {

            }

            public void onFinish() {
                byte[] byteArray = null;
                try {
                    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    if (parentImageRelativeLayout != null) {
                        parentImageRelativeLayout.setDrawingCacheEnabled(true);
                        parentImageRelativeLayout.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
                        byteArray = byteArrayOutputStream .toByteArray();
                    }

                    byteArrayOutputStream.flush();
                    byteArrayOutputStream.close();
                } catch (Exception var7) {
                    var7.printStackTrace();
                }
                Intent returnIntent = new Intent();
                if (byteArray != null) {
                    String imgString = Base64.encodeToString(byteArray, Base64.NO_WRAP);
                    returnIntent.putExtra("image", imgString);
                }
                setResult(Activity.RESULT_OK, returnIntent);
                finish();
            }
        }.start();
        //Toast.makeText(this, getString(R.string.save_image_succeed), Toast.LENGTH_SHORT).show();
    } else {
        showPermissionRequest();
    }
}

Проблема в том, что вызывается finish();, но активность никогда не выполняетсябыл закрыт.Если я запускаю следующий код, он закрывает действие.

private void returnBackWithSavedImage() {
    int permissionCheck = PermissionChecker.checkCallingOrSelfPermission(this,
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
        Intent returnIntent = new Intent();
        setResult(Activity.RESULT_OK, returnIntent);
        finish();
    } else {
        showPermissionRequest();
    }
}

Я бьюсь над этим вопросом целый день, но действительно не могу решить.

Я ценю любую помощь.

Большое спасибо за ваше время и помощь в этом вопросе.

1 Ответ

0 голосов
/ 11 февраля 2019

Простое перемещение процесса захвата изображения в метод решит проблему.Похоже, что CountDownTimer onFinish() не работал в потоке пользовательского интерфейса.

Итак, измените ваш код на что-то вроде этого:

private void returnBackWithSavedImage() {
    int permissionCheck = PermissionChecker.checkCallingOrSelfPermission(this,
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permissionCheck == PackageManager.PERMISSION_GRANTED) {

        ...

        new CountDownTimer(1000, 500) {
            public void onTick(long millisUntilFinished) {

            }

            public void onFinish() {
                captureImage();
            }
        }.start();
        ...
    } else {
        showPermissionRequest();
    }
}

private void captureImage() {

    byte[] byteArray = null;
    try {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        if (parentImageRelativeLayout != null) {
            parentImageRelativeLayout.setDrawingCacheEnabled(true);
            parentImageRelativeLayout.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
            byteArray = byteArrayOutputStream .toByteArray();
        }

        byteArrayOutputStream.flush();
        byteArrayOutputStream.close();
    } catch (Exception var7) {
        var7.printStackTrace();
    }
    Intent returnIntent = new Intent();
    if (byteArray != null) {
        String imgString = Base64.encodeToString(byteArray, Base64.NO_WRAP);
        returnIntent.putExtra("image", imgString);
    }
    setResult(Activity.RESULT_OK, returnIntent);
    finish();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...