今天小馬來講下在使用相機功能時如果正确的使用相機,因為小馬目前用的時候在
網上找了例子,但後來發現有很多相機導入之後就不能用了,我很郁悶的,再後來就
聽到群裡有人講到相機什麼MediaStore啊什麼的,這個類沒聽過,是以查了下,此
處再多說點東西,大家查東西的時候不用把類所屬的哪個包都記得清清楚楚的,還得
在API找半天,如果遇到什麼沒見過的類,可以直接在Android Developer裡面使用
search這個查詢框,不明白什麼就寫什麼進去:
<a target="_blank" href="http://blog.51cto.com/attachment/201112/023142804.png"></a>
現在,直接開始代碼,最後小馬會把我做的DEMO貼出來,供大家學習:
import java.io.ByteArrayOutputStream;
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* @Title: CameraTestActivity.java
* @Package com.lvguo.www
* @Description: 相機測試
* @author MZH
* @version V2.2 老樣子,寫個自己喜歡的版本号,友善日後維護
*/
public class CameraTestActivity extends Activity {
private Button btn ;
private static final String IMAGE_UNSPECIFIED = "image/*";
String kkk = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//第一次看見這個類,不認識,直接Android Developer裡面Search
//小馬英文不是很好,時刻在電腦上挂着詞典,也希望朋友們能準備一款自己喜愛的詞典
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//參數可直接在官方文檔裡面查到,是以朋友們練下手吧,自己查下EXTRA_OUTPUT
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(),
"mzh.jpg")));//temp為儲存照片的檔案名
//此處講幾句,類似這些方法,小馬建議直接在浏覽器下查,因為文檔查不到就說沒查到,
//有網情況下,會自動定位到Activity | Android Developers直接點就OK了
startActivityForResult(intent, 1); //這是個好東西哦
Toast.makeText(getApplicationContext(), "點選拍照", Toast.LENGTH_LONG).show();
}
});
}
/**
* 用來處理startActivityForResult傳回的資料,查此方法用老辦法 :直接在浏覽器下查
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 9) { //此處的數字自己定,可随便
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
//英語不好的朋友,拿工具查compress是什麼意思就明白了,小馬英語一般,是以此處多說一句,工具
photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);
byte[] b = stream.toByteArray();
//Base64Coder是一個剪切壓縮輔助類,裡面的東西我也看不懂,不過沒事,直接用,因為要用的方法不多,情況具體定
kkk = new String(Base64Coder.encodeLines(b));
}
if(requestCode == 1){
File picture = new File(Environment.getExternalStorageDirectory()
+ "/mzh.jpg");
cutPic(Uri.fromFile(picture));
super.onActivityResult(requestCode, resultCode, data);
public void cutPic(Uri uri) {
//下面這一句第一眼看到我不懂,沒事,直接Android Developer裡面Search Intent
//熟悉下面Summary嗎?用工具查什麼意思,再找下它是什麼地方的,是官方文檔最右側頂端 的東西,裡面有個Ctros,點進去
//Summary: Nested Classes | Constants | Inherited Constants | Fields
//| Ctors | Methods | Inherited Methods | [Expand All]
//會發現有個構造方法:Intent(String action)。。。。再點進去,貼官方代碼:
/**
* public Intent (String action)
Since: API Level 1
Create an intent with a given action. All other fields (data, type, class) are null.
Note that the action must be in a namespace because Intents are used globally in
the system -- for example the system VIEW action is android.intent.action.VIEW;
an application's custom action would be something like com.google.app.myapp.CUSTOM_ACTION.
Parameters
<看到這句了吧?ACTION_VIEW,不知道的可以再Search>
action The Intent action, such as ACTION_VIEW.
要再不明白的朋友可以直接在有網情況下直接把com.android.camera.action.CROP Search一下就OK了,
小馬查詢文檔的能力不強,是以在查詢這塊多說幾句
*/
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪圖檔寬高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, 9);
}
好了,到目前為止,代碼已經貼完了,但有重要的一點,要在剛開始做東西時就應該想清楚自己需要什麼東西,有沒權限啊SD卡空間啊什麼問題的,是以,沒權限的不行,報錯,是以加上以下權限即可:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 相機使用權限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
這些權限網上都有,搜下拍照要什麼權限就可以了,如果你覺得沒太懂的話,就自己在小馬上傳的附件裡面打斷點跟下就知道是怎麼走的咯,很簡單的DEMO,但在網上找的相機都會有錯,是以自己試了下,可以了就貼出來,朋友們有好的方法可以指點小馬一下,三人行,必有我師,小馬知錯就改,吼吼,學習愉快!
<a href="http://down.51cto.com/data/2359470" target="_blank">附件:http://down.51cto.com/data/2359470</a>
本文轉自華華世界 51CTO部落格,原文連結:http://blog.51cto.com/mzh3344258/741318,如需轉載請自行聯系原作者