Android-студия намерения внутри намерения аварии - PullRequest
0 голосов
/ 03 ноября 2018

Итак, у меня есть два действия, давайте назовем их A и B, действие A имеет ввод текста и кнопку, которая вызывает действие B с методом намерения:

и у меня есть действие B, которое также предназначено для приложения камеры:

ImageView photo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.b);

    TextView textView = findViewById(R.id.textView);

    Button buttonCapture = findViewById(R.id.buttonCapture);
    photo = findViewById(R.id.photo);

    buttonCapture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent1, 0);
        }
    });
}

@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Bitmap bitmap = (Bitmap) (data != null ? requireNonNull(data.getExtras()).get("data") : null);
    photo.setImageBitmap(bitmap);
}

и когда я запускаю это в симуляторе, я получаю первый штраф за действие A, нажимаю на кнопку, он открывает действие B, я снова нажимаю кнопку, и он возвращает меня к действию A или к аварийному завершению (случайно?) мой файл манифеста:

package="com.example.user.app">
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".A">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name="android.intent.action.VIEW"/>

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".B">
    </activity>

</application>

за исключением:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.app, PID: 18441
java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.android.camera2/com.android.camera.CaptureActivity } from ProcessRecord{296747c 18441:com.example.user.app/u0a88} (pid=18441, uid=10088) with revoked permission android.permission.CAMERA

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

хорошо, я вижу ...

При запуске Android 6 (API 23), если ваше приложение имеет разрешение CAMERA, объявленное в манифесте, ему необходимо, чтобы разрешение CAMERA было GRANTED , чтобы получить доступ к ACTION_IMAGE_CAPTURE и т. Д. ... (что обычно происходит не требует разрешения КАМЕРЫ самостоятельно). Если нет, то он автоматически вызывает исключение SecurityException.

делай как ниже !!!

1- Если вам нужен только ACTION_IMAGE_CAPTURE и т. Д.

Удалите разрешение CAMERA из манифеста, и все будет в порядке

2 - Если вам тоже нужно разрешение CAMERA

Проверять разрешение CAMERA во время выполнения и запускать намерение только при наличии разрешения

0 голосов
/ 03 ноября 2018

1) это может случиться, когда вы не декларируете свою активность B в манифестах !!!

2) удалите final перед определением EditText и попробуйте снова !!!

если вы отправите свои логи, я могу помочь вам лучше ...

...