2017-05-30 156 views
2

我希望用户能够在我的应用程序中快速打开默认相机应用程序(或其默认设置)。但是,我不想使用android.media.action.IMAGE_CAPTURE,因为这只会显示应用程序的照片拍摄部分。我只想简单地打开相机应用程序,而不使用它。我知道这是可能的,因为我已经使用过的几个图库应用程序(Most notibale:Focus)只能简单地打开相机应用程序,而没有使用IMAGE_CAPTURE。打开默认相机应用程序而不使用action.Image_Capture

+0

不确定,但您可能只是使用'android.media.action.IMAGE_CAPTURE'意图获取支持该意图的所有应用程序的列表,然后仅使用其包的默认意图过滤列表并启动其中一个应用程序。 – Heinrich

+0

我尝试过,但它只显示实际的图像捕捉意图,而不是整个打开应用程序。无论打开什么相机应用程序,它只会打开图像捕捉部分。 – MJonesDev

+0

添加了更详细的解释作为答案。 – Heinrich

回答

3

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

在科特林来实现:

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过滤器创建的意图,context是当前应用程序上下文和packageManager是上下文的PackageManager实例)

+1

我会在可能的情况下尝试此操作,但为了执行此操作,我需要更新到Canary Android Studio。谢谢! – MJonesDev

+1

@MJonesDev您可以在Android Studio 2.3.2中安装Kotlin插件或将此代码转换为java,这应该不那么困难。 –

+1

该代码没有使用任何Kotlin专用功能,因此请不要犹豫,以使用Java代替。 – Heinrich

1

如果你想要打开默认的相机应用程序,使用下面的代码

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

intent.resolveActivity(getPackageManager()).getPackageName())); 
相关问题