android - 即时应用相机 Intent

标签 android android-camera android-permissions android-instant-apps

我开发了 Instant App,我想用相机拍照。 如果我启动已安装的应用,一切正常。但是使用 Instant App 时,出现以下错误:

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" />

Activity :

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 的设备(三星)上进行开发。 我检查了可用权限,Camera 就是它应该工作的原因。 ( https://developer.android.com/topic/instant-apps/faqs.html#available-permissions ) 提前致谢。

最佳答案

我担心问题不是来自许可,而是来自您启动 Activity 的方式。

Instant Apps 实际上无法启动具有明确 Intent 的 Activity,除非该特定 intent 已提供给 instant apps。

编辑:抱歉,我之前告诉过您,您正在尝试启动一个明确的 Intent 。实际上 new Intent(MediaStore.ACTION_IMAGE_CAPTURE) 是一个隐式的。因此我不明白为什么你有安全异常(exception)。 您使用的是最新的 Canary 4 版本吗?

对于显式 Intent 和隐式 Intent 之间的区别:

  • 明确的 Intent 专门针对另一个应用程序或组件

  • 隐式 Intent 让系统选择应由哪个应用处理该 Intent 。即 Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com");

关于android - 即时应用相机 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44829710/

相关文章:

Android Camera2 Burst 和 ImageReader

android - Nexus 7 摄像头(或所有前置摄像头?)是镜像的(上下颠倒)

安卓权限: android. permission.INTERACT_ACROSS_USERS_FULL

android - 如何获得 Activity 的可见尺寸?

android - Android Activity 的唯一 ID

android - 将 android camera2 图像保存为无损 PNG

java - 为什么在没有请求的情况下授予 WRITE_CONTACTS 权限?

android - 在没有 GET_ACCOUNTS 权限的情况下为我们自己的应用程序调用 getAccounts 或 getAccountsByType

java - WebView 自动填充表单

android - 如何测试 Amazon S3 或 Microsoft Azure?