5

我開發的即時應用程序,我想用相機拍照。 如果我啓動安裝的應用程序,一切正常。但隨着即時應用,我得到以下錯誤:Instant Apps相機意圖

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

這裏我的代碼:

AndroidManifest.xml中

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

活動:

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開發設備(三星)。 我檢查了可用的權限和相機是這就是爲什麼它應該工作。 (https://developer.android.com/topic/instant-apps/faqs.html#available-permissions) 在此先感謝。

回答

2

我擔心問題不是來自許可,而是來自您啓動活動的方式。

即時應用程序實際上無法以明確的意圖啓動活動,除非該特定意圖已被提供給即時應用程序。

編輯:對不起,我之前告訴過你,你試圖啓動一個明確的意圖。實際上,新的意圖(MediaStore.ACTION_IMAGE_CAPTURE)是一個隱含的意圖。因此我不明白你爲什麼有安全例外。 你使用最新的金絲雀4版嗎?

對於明確意圖和隱式之間的區別:

  • 明確意圖目標明確其他應用或組件

  • 隱性意圖讓系統選擇哪個應用應該處理這個意圖。即Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com");

+0

我正在使用** Android Studio 3.0 Canary 4 ** - Gradle版本:** 4.0 ** - Android插件版本:** 3.0.0-alpha4 ** – Pouicky

2

我不認爲通過MediaStore.ACTION_IMAGE_CAPTURE意圖拍攝的照片將在目前的工作很遺憾。即使該活動可能啓動,它也需要對外部存儲的寫入訪問權才能實際發送完整映像,而外部存儲不適用於Instant Apps(請參閱restrictions)。 FileProvider也不支持即時應用程序,以防捕捉意圖寫入內部存儲器(我不確定)。

的許可android.permission.CAMERA雖然是支持,你只需要使用camera2 APIs。有一個代碼示例,你可以試試here

+0

這是一個外部可見的bug:https:/ /issuetracker.google.com/issues/66942980 – AdamK

0

參照Google issue tracker中,FIX將機器人8.1奧利奧的一部分。不幸的是這是不可能通過GMS來解決,但是我們發出了修復,以我們的合作伙伴補丁,這樣他們就可以採取,即使他們沒有建立過一個8.1基礎的修復。

如果問題仍然存在,請在Google issue tracker舉報,他們將重新開放審查。