不使用action.Image_Capture打开默认相机应用程序

问题描述 投票:2回答:3

我希望用户能够在我的应用程序中快速打开默认的相机应用程序(或他们设置为默认的应用程序)。但是,我不想使用android.media.action.IMAGE_CAPTURE,因为这只会显示应用程序的拍照部分。我只想打开相机应用程序而不使用它。我知道这是可能的,因为我使用的几个画廊应用程序(大多数notibale:Focus)只能简单地打开相机应用程序而没有问题,并且没有使用IMAGE_CAPTURE。

android camera android-image-capture
3个回答
3
投票

这可以通过使用PackageManager#resolveActivity(Intent)来实现

在Kotlin:

val info: ResolveInfo? = packageManager
        .resolveActivity(cameraIntent);
if (info == null) {
    // No camera app installed.
    return
}

// Documentation says at least one of the three infos is not-null:
val app: ApplicationInfo = info.activityInfo?.applicationInfo 
        ?: info.serviceInfo?.applicationInfo 
        ?: info.providerInfo!!.applicationInfo 
val launch: Intent? = packageManager
        .getLaunchIntentForPackage(app.packageName)
if (launch == null) {
    // Camera app has no default intent.
    return
}
// Launch the camera intent's 
// resolved app's default activity.
context.startActivity(launch)

(其中cameraIntent是使用android.media.action.IMAGE_CAPTURE过滤器创建的Intent,context是当前应用程序上下文,packageManager是上下文的PackageManager实例。)


1
投票

如果您只想打开默认相机应用程序,请使用以下代码

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        startActivity(
                getPackageManager().getLaunchIntentForPackage(

intent.resolveActivity(getPackageManager()).getPackageName()));

0
投票
       String intentpackage;
        List<ApplicationInfo> list = packageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
            for (int a=0;a<list.size();a++) {
                if((list.get(n).flags & ApplicationInfo.FLAG_SYSTEM)==1)
                {
                    Log.d("TAG", "Installed Applications  : " + list.get(a).loadLabel(packageManager).toString());
                    Log.d("TAG", "package name  : " + list.get(a).packageName);
                    if(list.get(a).loadLabel(packageManager).toString().equalsIgnoreCase("Camera")) {
                        intentpackage = list.get(a).packageName;
                        break;
                    }
                }
            }

 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if(defaultCameraPackage!=null){
                cameraIntent.setPackage(intentpackage);
            }

            startActivityForResult(cameraIntent, 1);
© www.soinside.com 2019 - 2024. All rights reserved.