5

Fotoğraf makinesi ile fotoğraf çekmek istediğim Anında Uygulama geliştirdim. Yüklü Uygulama'u yüklediğimde her şey çalışır. Ama ile App Anında, aşağıdaki hatayı alıyorum:Anında Uygulamalar Kamera Niyeti

İşte
java.lang.SecurityException: Not allowed to start activity Intent { act=android.media.action.IMAGE_CAPTURE launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } 

kodum:

AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />

Etkinlik:

private static int CAMERA_REQUEST = 1234; 

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

findViewById(R.id.mainButton).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      startCamera(); 
     } 
    }); 
} 

private void startCamera() { 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     } else { 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST); 
     } 
    } else { 
     Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_REQUEST); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    startCamera(); 
} 


protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST) { 
     Bitmap bmp = (Bitmap)data.getExtras().get("data"); 
     ((ImageView)findViewById(R.id.mainImageView)).setImageBitmap(bmp); 
    } 
} 

Android 7.0 ile cihazda (samsung) geliştiriyorum. Mevcut izni kontrol ettim ve Kamera bu yüzden çalışması gerekiyor. (https://developer.android.com/topic/instant-apps/faqs.html#available-permissions) Önceden teşekkürler.

cevap

2

Sorun, izinlerden değil, etkinliğinizi başlatmanın yolundan gelmekten korkuyor. Anlık uygulamalar, belirli uygulamalar anlık uygulamalar için kullanıma sunulmadığı sürece, açık niyetle faaliyet başlatamazlar.

DÜZENLEME: Üzgünüm, daha önce açık bir niyet başlatmaya çalıştığınızı söylemiştim. Aslında yeni Intent (MediaStore.ACTION_IMAGE_CAPTURE) bir örtüktür. Bu yüzden neden güvenlik istisnasına sahip olduğunuzu anlamıyorum. En son kanarya 4 sürümünü kullanıyor musunuz? Açık bir niyet ve örtük bir arasında fark için

:

  • Açık niyet hedef spesifik başka bir uygulama veya bileşen

  • Örtülü niyet sistemi niyet işlemesi gerektiğini hangi uygulamanın seçelim. yani Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com");

+0

Kullanıyorum ** Android Studio 3.0 Kanarya 4 ** - Not sürümü: ** 4.0 ** - Android Eklentisi Sürüm: ** 3.0.0-alpha4 ** – Pouicky

2

Ben ne yazık ki şu anda çalışacak MediaStore.ACTION_IMAGE_CAPTURE niyet yoluyla fotoğrafları yakalayan sanmıyorum. Etkinlik başlasa bile, tam görüntüyü gerçekten geri göndermek için harici depolama alanına yazma erişimi gerektirir ve Anında Uygulamalar için harici depolama kullanılamaz (bkz. restrictions). FileProvider aynı zamanda Anında Uygulamalar konusunda da destek sağlamaz, çünkü yakalama amacı dahili depolamaya yazabilir (bundan emin değilim).

android.permission.CAMERA izni izinli olsa da, yalnızca camera2 APIs'u kullanmanız gerekir. here'u deneyebileceğiniz bir kod örneği vardır.

+0

Bu dışarıdan görülebilir bir hata: https://issuetracker.google.com/issues/66942980 – AdamK

0

Google issue tracker referansla, düzeltme robot 8.1 Oreo bir parçası olacaktır. Ne yazık ki, GMS ile düzeltmek mümkün değil, ancak ortaklarımıza yönelik düzeltme için bir yama gönderiyoruz, bu nedenle, 8.1 temel'dan çıkmıyor olsa bile düzeltmeyi kabul edebilirler.

Sorun devam ederse, lütfen incelemek üzere yeniden açılacak olan Google issue tracker numaralı telefonu bildirin.