Android 不使用action.Image\u Capture打开默认相机应用程序
我希望用户能够在我的应用程序中快速打开默认相机应用程序(或他们设置为默认的相机应用程序)。但是,我不想使用android.media.action.IMAGE_CAPTURE,因为这只会显示应用程序的拍照部分。我只想简单地打开相机应用程序而不用这个。我确实知道这是可能的,因为我使用过的几个画廊应用程序(大多数不可用:Focus)能够简单地打开相机应用程序而没有问题,并且没有使用图像捕获 这可以通过使用Android 不使用action.Image\u Capture打开默认相机应用程序,android,camera,android-image-capture,Android,Camera,Android Image Capture,我希望用户能够在我的应用程序中快速打开默认相机应用程序(或他们设置为默认的相机应用程序)。但是,我不想使用android.media.action.IMAGE_CAPTURE,因为这只会显示应用程序的拍照部分。我只想简单地打开相机应用程序而不用这个。我确实知道这是可能的,因为我使用过的几个画廊应用程序(大多数不可用:Focus)能够简单地打开相机应用程序而没有问题,并且没有使用图像捕获 这可以通过使用PackageManager#resolveActivity(Intent) 在科特林: val
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\u CAPTURE
过滤器创建的意图,context
是当前应用程序上下文,packageManager
是上下文的packageManager
实例。)如果您只想打开默认的摄像头应用程序,请使用下面的代码
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivity(
getPackageManager().getLaunchIntentForPackage(
intent.resolveActivity(getPackageManager()).getPackageName()));
String-intentpackage;
List List=packageManager.getinstalledApplication(packageManager.GET_unnstalled_程序包);
对于(int a=0;a不确定,但您可以使用android.media.action.IMAGE_CAPTURE
intent来获取支持该意图的所有应用程序的列表,然后过滤该列表并使用其软件包的默认意图启动其中一个应用程序。我试过了,但它只显示实际的图像捕获意图,而不是打开整个应用程序。没有无论打开哪个摄像头应用程序,它只会打开图像捕获部分。添加了更详细的解释作为答案。我会在可能的情况下尝试,但我需要更新到Canary Android Studio才能做到这一点。谢谢!@MJonesDev您可以在安卓Studio 2.3.2中安装Kotlin插件或将此代码转换为java,这不应该发生代码没有使用任何Kotlin独有的特性,所以请不要犹豫,改用Java。
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);