如何从intent(Android 7)拍摄全尺寸、高分辨率的照片
有一段时间我第一次试着拍一张全尺寸的照片。我尝试缩放缩略图,使用URI,还尝试了如何从intent(Android 7)拍摄全尺寸、高分辨率的照片,android,android-intent,android-camera-intent,android-7.1-nougat,Android,Android Intent,Android Camera Intent,Android 7.1 Nougat,有一段时间我第一次试着拍一张全尺寸的照片。我尝试缩放缩略图,使用URI,还尝试了FileProvider,但似乎不起作用。 我肯定我把所有的权限都放在了AndroidManifest.xml中 这是我的密码: static final int REQUEST_IMAGE_CAPTURE = 1; public void openCamera(View view) { photoName = ""; if (ContextCompa
FileProvider
,但似乎不起作用。
我肯定我把所有的权限
都放在了AndroidManifest.xml
中
这是我的密码:
static final int REQUEST_IMAGE_CAPTURE = 1;
public void openCamera(View view)
{
photoName = "";
if (ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
{
if (!ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CAMERA))
{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 0x5);
}
}
else
{
cameraCapture();
}
}
private void cameraCapture()
{
File image = null;
try
{
File filePath = new File(getFilesDir(), "myfolder");
image = new File(filePath + File.separator + "myimage.jpg");
File storageDir = Environment.getExternalStorageDirectory();
if(!image.exists())image.createNewFile();
currentImagePath = image.getAbsolutePath();
}
catch(IOException e)
{}
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null)
{
if (image != null)
{
Uri imageUri = FileProvider.getUriForFile(this, "com.touchmultimedia.testpermessi.provider", image);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_IMAGE_CAPTURE)
{
if (resultCode == RESULT_OK)
{
File photoFile = new File(photoUri.getPath());
if (photoFile != null && photoFile.exists())
{
Bitmap b = BitmapFactory.decodeFile(photoUri.getPath());
imgView.setImageBitmap(b);
imgView.setVisibility(View.VISIBLE);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
photoName = "IMG_" + timeStamp + ".jpg";
//deleteTemps(photoFile);
saved = 0;
}
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED)
{
switch(requestCode)
{
//Camera
case 5:
cameraCapture();
break;
//Write External Storage
case 3:
saveImage();
break;
}
}
}
在AndroidManifest.xml
中:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera"
android:required="true"/>
<uses-feature android:name="android.hardware.camera.autofocus" />
我已经阅读了所有其他的例子,但没有一个对我的问题有帮助
谢谢所有能帮助我的人 如果“myfolder”不存在,您需要确保它也被创建
image.createNewFile()
不会自动为您创建“myfolder”。如果“myfolder”不存在,您需要确保也创建了它image.createNewFile()
不会自动为您创建“myfolder”。以下是我的应用程序的工作代码:
public void startCameraIntent(String fileName) {
File file = new File(fileName);
Uri outputFileUri = Uri.fromFile(file);
Intent intent;
int currentAPIVersion = android.os.Build.VERSION.SDK_INT;
String deviceManufacturer = android.os.Build.MANUFACTURER;
String samsung = "samsung";
if (currentAPIVersion >= android.os.Build.VERSION_CODES.M && deviceManufacturer.compareTo(samsung) != 0) {
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE);
} else {
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE_REQUEST_CODE);
}
请注意带有制造商检查的线。自android M以来,三星在图像捕获方面使用了不同的意图操作。以下是我的应用程序的工作代码:
public void startCameraIntent(String fileName) {
File file = new File(fileName);
Uri outputFileUri = Uri.fromFile(file);
Intent intent;
int currentAPIVersion = android.os.Build.VERSION.SDK_INT;
String deviceManufacturer = android.os.Build.MANUFACTURER;
String samsung = "samsung";
if (currentAPIVersion >= android.os.Build.VERSION_CODES.M && deviceManufacturer.compareTo(samsung) != 0) {
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE);
} else {
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE_REQUEST_CODE);
}
请注意带有制造商检查的线。自安卓M以来,三星在图像捕获方面使用了不同的意图动作。请详细解释“它似乎不起作用”的含义。使用
FileProvider
演示如何使用ACTION\u IMAGE\u CAPTURE
。但请记住,并非所有支持ACTION\u IMAGE\u CAPTURE
的Android摄像头应用程序都能与内容
Uri
一起工作,就像你从文件提供者
@commonware获得的文件提供者
应用程序崩溃一样,可能是因为我犯了一些错误,我遵循Android指南,但他们没有帮助请详细解释“它似乎不起作用”的含义。使用FileProvider
演示如何使用ACTION\u IMAGE\u CAPTURE
。但请记住,并非所有支持ACTION\u IMAGE\u CAPTURE
的Android摄像头应用程序都能与内容
Uri
一起工作,就像你从文件提供者
@commonware获得的文件提供者
应用程序崩溃一样,可能是因为我犯了一些错误,我遵循Android指南,但他们没有帮助我知道,但我认为问题不存在,因为在调试期间,我可以获取文件夹URI,所以我认为它存在我知道,但我认为问题不存在,因为在调试期间,我可以获取文件夹URI,所以我认为它存在