我将为我的Android应用程序实现相机功能。为此,我在互联网上搜索了很多,并找到了实现相机功能的2种方法
使用
设计自己的相机类 android.view.SurfaceHolder and
android.view.SurfaceView
但这种做法对我来说确实很好,因为我必须处理许多会使我的代码变得复杂的事情。
2.我可以使用意图来调用设备相机。现在再次在这里,我有2个选项
i)使用MediaStore.EXTRA_OUTPUT
而不使用MediaStore.EXTRA_OUTPUT
如果我不使用MediaStore.EXTRA_OUTPUT
,我会得到一个不是我的实际要求的缩略图。我需要比这更大的图像,所以如果我缩放这个缩略图,我会发现低质量的图像。
如果我使用MediaStore.EXTRA_OUTPUT
我会在某些设备上获取任何图片,例如三星,
onActivityResult(int requestCode, int resultCode, Intent intent)
我发现意图为空。在互联网上搜索了很多,我发现这是特定于设备的问题。我有三星Galaxy。在这方面我正面临着这个问题。
我不希望我的代码成为特定于设备的代码。所以任何人都可以告诉我如何使我的代码通用。为了您的分析,我使用以下代码
@Override
public void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
File root = new File(Environment
.getExternalStorageDirectory()
+ File.separator + "myDir" + File.separator)
if(!root.exists()){
root.mkdirs();
}
sdImageMainDirectory = new File(root, "myPicName");
startCameraActivity();
}
catch (Exception e) {
finish();
Toast.makeText(this, "Error occured. Please try again later.",
Toast.LENGTH_SHORT).show();
}
}
Uri outputFileUri;
protected void startCameraActivity() {
outputFileUri = Uri.fromFile(sdImageMainDirectory);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (resultCode) {
case 0:
finish();
break;
case -1:
try {
if(intent != null)
StoreImage(this, Uri.parse(intent.toURI()),
sdImageMainDirectory);
} catch (Exception e) {
e.printStackTrace();
}
Intent i = new Intent(this,Home.class);
i.putExtra("url", outputFileUri);
startActivity(i);
finish();
}
}
public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) {
Bitmap bm = null;
try {
bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
FileOutputStream out = new FileOutputStream(imageDir);
bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
bm.recycle();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
请检查此链接:Capture image using Intent
此代码适用于我使用的所有三星设备(如Galaxy S,Galaxy Tab,Galaxy Pro)。