Экран устройства становится черным после открытия камеры - PullRequest
0 голосов
/ 13 февраля 2019

[решено] Я не знаю, почему он это делал, но все, что мне нужно было сделать, это перезагрузить телефон, и он снова начал работать.Удачного кодирования всем!:)

Я занимаюсь разработкой приложения, в котором вы можете делать снимки и публиковать их.Раньше намерение камеры работало отлично, но сегодня, когда я собрал приложение для своего мобильного телефона и попытался открыть намерение камеры после нескольких изменений в совершенно другой активности (что не должно влиять на камеру), все приложение зависает ипосле нескольких секунд бездействия он вывел черный экран, на котором я даже не вижу своих кнопок «домой», «назад» и «закрыть приложения» в нижней части экрана.Приложение не вылетает и не выдает никаких сообщений об ошибках, но черный экран не исчезает до того, как я нажимаю на то место, где должна быть кнопка «Домой» на моем телефоне, и после этого закрываю приложение.

Я попросил разрешения на использование камеры, и она работает нормально, но после этого появляется черный экран.И, как уже говорилось, камера работала в течение многих недель разработки, но только сегодня она начала это делать.

Вот мой код для намерения камеры:

    //ADD NEW SPOT
public void addNewSpot(View v)
{
    //CHECKING PERMISSION FOR CAMERA
    if (checkCallingOrSelfPermission(android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
    {
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);
    }
    else
    {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null)
        {
            File photoFile = null;
            try
            {
                photoFile = createImageFile();
            }
            catch (IOException ex)
            {
                ex.printStackTrace();
            }
            if (photoFile != null)
            {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
                StrictMode.setVmPolicy(builder.build());
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        }
    }
}


//CHECK FOR THE RESULT FROM CAMERA ACTIVITY
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == MY_CAMERA_PERMISSION_CODE)
    {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
        {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null)
            {
                File photoFile = null;
                try
                {
                    photoFile = createImageFile();
                }
                catch (IOException ex)
                {
                    ex.printStackTrace();
                }
                if (photoFile != null)
                {
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
                    StrictMode.setVmPolicy(builder.build());
                    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
                }
            }
        }
    }
}


//CREATE FOLDER FOR THE IMAGE
String imageFilePath;

private File createImageFile() throws IOException {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
    String imageFileName = "IMG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    imageFilePath = image.getAbsolutePath();
    return image;
}


//GET TAKEN IMAGE, DOWNSCALE IT AND SEND IT TO CROPPING
File compressedImageFile;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK)
    {
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File f = new File(imageFilePath);
        try
        {
            compressedImageFile = new Compressor(this).compressToFile(f);
        }
        catch (Exception e)
        {
            String message = e.getMessage();
            Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
        }
        Uri contentUri = Uri.fromFile(compressedImageFile);
        mediaScanIntent.setData(contentUri);
        this.sendBroadcast(mediaScanIntent);

        CropImage.activity(contentUri)
                .setGuidelines(CropImageView.Guidelines.ON)
                .setAspectRatio(1, 1)
                .start(this);
    }

    //CROP THE IMAGE
    if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
    {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);

        if(resultCode == RESULT_OK)
        {
            Uri resultUri = result.getUri();

            Intent addPostIntent = new Intent(MainActivity.this, add_new_spot.class);
            addPostIntent.putExtra("imagePath", resultUri.toString());
            startActivity(addPostIntent);
        }
        else
        {
            Toast.makeText(this, "Image can't be cropped, please try again", Toast.LENGTH_SHORT).show();
        }
    }
}

Я ожидаю, что намерение будет работать нормально, так как оно работало раньше, но вместо этого оно останавливает приложение на черном экране изаставить пользователя перезапустить приложение.Заранее спасибо.

...