,我要實現的拍照功能爲我的Android app.for這一點,我搜索了很多互聯網上,發現來實現拍照功能Android攝像頭實現
設計使用
自己的相機類2路android.view.SurfaceHolder and android.view.SurfaceView
但這種方法看起來不錯,我在這方面,我必須採取的很多東西,這將使我的代碼複雜的護理。
2. 我可以使用意圖調用設備攝像頭。現在又在此,我有2個選項使用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();
}
}