版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
android手機有自帶的照相機和圖庫,我們做的項目中有時用到上傳圖片到服務(wù)器,今天做了一個項目用到這個功能,所以把我的代碼記錄下來和大家分享,第一次寫博客希望各位大神多多批評。
首先上一段調(diào)用android相冊和相機的代碼:
代碼如下:
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//調(diào)用android自帶的照相機
photoUri=MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
startActivityForResult(intent,1);
代碼如下:
Intenti=newIntent(Intent.ACTION_PICK,
vider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//調(diào)用android的圖庫
startActivityForResult(i,2);
代碼如下:
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
//完成照相后回調(diào)用此方法
super.onActivityResult(requestCode,resultCode,data);
case1:
switch(resultCode){
caseActivity.RESULT_OK://照相完成點擊確定
StringsdStatus=Environment.getExternalStorageState();
if(!sdStatus.equals(Environment.MEDIA_MOUNTED)){//檢測sd是否可用
Log.v("TestFile","SDcardisnotavaiable/writeablerightnow.");
return;}
Bundlebundle=data.getExtras();
Bitmapbitmap=(Bitmap)bundle.get("data");//獲取相機返回的數(shù)據(jù),并轉(zhuǎn)換為Bitmap圖片格式
FileOutputStreamb=null;
Filefile=newFile("/sdcard/pk4fun/");
file.mkdirs();//創(chuàng)建文件夾,名稱為pk4fun//照片的命名,目標(biāo)文件夾下,以當(dāng)前時間數(shù)字串為名稱,即可確保每張照片名稱不相同。網(wǎng)上流傳的其他Demo這里的照片名稱都寫死了,則會發(fā)生無論拍照多少張,后一張總會把前一張照片覆蓋。細心的同學(xué)還可以設(shè)置這個字符串,比如加上“IMG”字樣等;然后就會發(fā)現(xiàn)sd卡中myimage這個文件夾下,會保存剛剛調(diào)用相機拍出來的照片,照片名稱不會重復(fù)。
Stringstr=null;
Datedate=null;
SimpleDateFormatformat=newSimpleDateFormat("yyyyMMddHHmmss");//獲取當(dāng)前時間,進一步轉(zhuǎn)化為字符串
date=newDate(resultCode);
str=format.format(date);
StringfileName="/sdcard/myImage/"+str+".jpg";
sendBroadcast(fileName);
try{
b=newFileOutputStream(fileName);
press(Bitmap.CompressFormat.JPEG,100,b);//把數(shù)據(jù)寫入文件
}catch(FileNotFoundExceptione){
e.printStackTrace();
}finally{
try{
b.flush();
b.close();
}catch(IOExceptione){
e.printStackTrace();
}
}break;
caseActivity.RESULT_CANCELED://取消
break;
}
break;
case2:
switch(resultCode){
caseActivity.RESULT_OK:{
Uriuri=data.getData();
Cursorcursor=mActivity.getContentResolver().query(uri,null,
null,null,null);
cursor.moveToFirst();
StringimgNo=cursor.getString(0);//圖片編號
StringimgPath=cursor.getString(1);//圖片文件路徑
StringimgSize=cursor.getString(2);//圖片大小
StringimgName=cursor.getString(3);//圖片文件名
cursor.close();
//Optionsoptions=newBitmapFactory.Options();
//options.inJustDecodeBounds=false;
//options.inSampleSize=10;
//Bitmapbitmap=BitmapFactory.decodeFile(imgPath,options);
}
break;
caseActivity.RESULT_CANCELED://取消
break;
}
break;
}
最后記得加權(quán)限
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.CAMERA"/>
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>Android調(diào)用系統(tǒng)相機和自定義相機實例
本博文主要是介紹了android上使用相機進行拍照并顯示的兩種方式,并且由于涉及到要把拍到的照片顯示出來,該例子也會涉及到Android加載大圖片時候的處理(避免OOM),還有簡要提一下有些人SurfaceView出現(xiàn)黑屏的原因。
Android應(yīng)用拍照的兩種方式,下面為兩種形式的Demo展示出來的效果。
知識點:一、調(diào)用系統(tǒng)自帶的相機應(yīng)用二、自定義我們自己的拍照界面三、關(guān)于計算機解析圖片原理(如何正確加載圖片到Android應(yīng)用中)
所需權(quán)限:
?123456<uses-permissionandroid:name="android.permission.CAMERA"/>
<uses-featureandroid:name="android.hardware.camera"/>
<uses-featureandroid:name="android.hardware.camera.autofocus"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
一、調(diào)用系統(tǒng)照相機程序拍照(方式一)
1.定義所需要的權(quán)限
2.我們需要定義調(diào)用系統(tǒng)相機App的Intent,當(dāng)然是通過設(shè)定IntentFilter中的Action來打開我們想要的activity了。
MediaStore.ACTION_IMAGE_CAPTURE-這個Action將打開拍照的系統(tǒng)相機。返回一個Image
MediaStore.ACTION_VIDEO_CAPTURE-這個Action將打開錄像的系統(tǒng)相機。返回一個Video
在MediaStore.ACTION_IMAGE_CAPTURE中,我們可以看到這段話:
【ThecallermaypassanextraEXTRA_OUTPUTtocontrolwherethisimagewillbe
written.IftheEXTRA_OUTPUTisnotpresent,thenasmallsizedimageisreturned
asaBitmapobjectintheextrafield.Thisisusefulforapplicationsthatonly
needasmallimage.IftheEXTRA_OUTPUTispresent,thenthefull-sizedimagewill
bewrittentotheUrivalueofEXTRA_OUTPUT.】
3.API規(guī)定我們傳入拍照得到圖片的存儲位置的Uri。否則Bimmap將以一個壓縮后的形式返回到我們當(dāng)前Activity.
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);//settheimagefilename則會把拍照的圖片存儲到我們傳入的Uri對應(yīng)的File里面。
4.我們調(diào)用startActivityForResult(intent)來啟動這樣一個系統(tǒng)相機app之后,然后在當(dāng)前應(yīng)用Activity的onActivityResult()中接受到返回拍照成功或者失敗的消息,做相應(yīng)處理。
5.“壓縮處理”(Android應(yīng)用中加載大圖片),并顯示到ImageView中。
二、自定義照相機1.檢查相機是否存在,并獲取相機Camera。2.創(chuàng)建一個相機圖像預(yù)覽類:extendsSurfaceView并implementsSurfaceHolder(我定義:MySurfaceView)
3.把這個預(yù)覽類放入一個自定義布局layout里面,并且可以在layout里添加自己的其他按鈕
4.設(shè)置對應(yīng)的拍照按鈕然后聽事件
5.捕獲照片和保存圖片6.釋放掉我們使用的相機Camera,不然之后其他應(yīng)用將無法使用它。三、計算機解析圖片的方式和Android中大圖片Bitmap的壓縮顯示處理這個問題有點老生長談了,平時我們經(jīng)常遇到一些圖片資源,我們把它加載到內(nèi)存發(fā)現(xiàn)拋出內(nèi)存不夠用的異常,即OOM,當(dāng)然加載圖片時出現(xiàn)的OOM情況有很多種,比如單張圖片沒有做壓縮,導(dǎo)致圖片占用內(nèi)存過大而發(fā)生內(nèi)存溢出,也有多張圖片一次性加載進來,導(dǎo)致的內(nèi)存溢出。通常單張大圖,我們加載進來往往會經(jīng)過一個圖片的壓縮處理的過程,而如果多張圖片加載,我們可能就需要一些緩存機制,再加上一些算法來保證程序不出現(xiàn)OOM。我們這里想要講的知識點跟單張大圖比較有關(guān)系首先,我們知道一個圖片,它是由很多像素點來表示的,而像素點的個數(shù)只跟圖片的分辨率有關(guān),而跟圖片所占的內(nèi)存空間大小無關(guān)。比如我們的桌面壁紙:1280*768的分辨率,那么它就有1280*768=983040個像素點,這意味著什么呢?我們知道我們要表示一個像素點的顏色,最經(jīng)常我們需要RGB三種顏色來表示,而R:0~255,相當(dāng)于兩個FF的位置,就是8位,這樣的話RGB合起來,一個像素點的表示就需要24位(這就是我們平衡聽到的24位圖),而加上透明度的8位,就是平時說的32位圖。那么一張圖片,它加載到內(nèi)存中的話,它會占用多大的空間呢?計算方法:(像素點*一個像素所占用的byte數(shù))/1024/1024(MB)
以1280*768的分辨率,32位圖為例:所占內(nèi)存大小:((1280*768*(32/8))/1024)/1024=3.75(MB)說了這么多,那么我們再來說下Android系統(tǒng)的規(guī)定吧,Android系統(tǒng)嚴(yán)格規(guī)定了每個應(yīng)用所能分配的最大的內(nèi)存為多少,我們知道有一個VM值(在我們創(chuàng)建模擬器的時候),這個VM值里面便是我們所說的堆空間(HeapSize),當(dāng)你的應(yīng)用占用的空間已經(jīng)超出我們定義的堆空間大小,那么不好意思,OOM這樣的話,我們明白了圖片的大小占據(jù)原理,還有盡量不要超出這個堆空間,那么OK,現(xiàn)在問題變得簡單了。如果我們有一種方式可以在圖片加載進來之前,知道圖片的大小,然后改變它的長、寬,這樣的話,分辨率便變小了,這樣出來的乘積也就變小了。比如:我們的屏幕只有320*240,這時候你加載大分辨的圖片進來最多也只能顯示成這樣,所以我們常采用的是對圖片進行壓縮處理。這里有個概念叫壓縮比:長:1024/320=3.2
約等于3寬:768/240=3.2
那這樣我們?nèi)绻褕D片壓縮成這樣大小的,最后的圖片加載進來的大小便是((320
*240
*(32/8))/1024)/1024=0.29(MB)希望我這樣講完,大家都能聽懂了,我這里先把照相機實例中出現(xiàn)的關(guān)于如果處理這塊圖片的代碼先粘出來?12345678910111213141516171819202122232425//-----------------------Android大圖的處理方式---------------------------
privatevoidsetPicToImageView(ImageViewimageView,FileimageFile){
intimageViewWidth=imageView.getWidth();
intimageViewHeight=imageView.getHeight();
BitmapFactory.Optionsopts=
newOptions();
//設(shè)置這個,只得到Bitmap的屬性信息放入opts,而不把Bitmap加載到內(nèi)存中
opts.inJustDecodeBounds=
true;
BitmapFactory.decodeFile(imageFile.getPath(),opts);
intbitmapWidth=opts.outWidth;
intbitmapHeight=opts.outHeight;
//取最大的比例,保證整個圖片的長或者寬必定在該屏幕中可以顯示得下
intscale=Math.max(imageViewWidth/bitmapWidth,imageViewHeight/bitmapHeight);
//縮放的比例
opts.inSampleSize=scale;
//內(nèi)存不足時可被回收
opts.inPurgeable=
true;
//設(shè)置為false,表示不僅Bitmap的屬性,也要加載bitmap
opts.inJustDecodeBounds=
false;
Bitmapbitmap=BitmapFactory.decodeFile(imageFile.getPath(),opts);
imageView.setImageBitmap(bitmap);
}關(guān)于堆空間:堆(HEAP)是VM中占用內(nèi)存最多的部分,通常是動態(tài)分配的。堆的大小不是一成不變的,通常有一個分配機制來控制它的大小。比如初始的HEAP是4M大,當(dāng)4M的空間被占用超過75%的時候,重新分配堆為8M大;當(dāng)8M被占用超過75%,分配堆為16M大。倒過來,當(dāng)16M的堆利用不足30%的時候,縮減它的大小為8M大。重新設(shè)置堆的大小,尤其是壓縮,一般會涉及到內(nèi)存的拷貝,所以變更堆的大小對效率有不良影響。
廢話少說下面就看代碼咯~~為了大家看起來方便點,代碼的結(jié)構(gòu)可能不是很規(guī)范!源碼下載地址:/detail/u011133213/7844683
代碼部分:
一、用系統(tǒng)的相機按鈕點擊之后開啟系統(tǒng)相機Activity?1234567891011findViewById(R.id.system_camera_btn).setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=
newIntent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
imageFileUri=getOutFileUri(TYPE_FILE_IMAGE);//得到一個FileUri
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageFileUri);
startActivityForResult(intent,SYSTEM_CAMERA_REQUESTCODE);
}
});生成File文件,并得到Uri?123456789101112131415161718192021222324252627282930313233343536373839404142434445//-----------------------生成Uri---------------------------------------
//得到輸出文件的URI
privateUrigetOutFileUri(intfileType){
returnUri.fromFile(getOutFile(fileType));
}
//生成輸出文件
privateFilegetOutFile(intfileType){
StringstorageState=Environment.getExternalStorageState();
if(Environment.MEDIA_REMOVED.equals(storageState)){
Toast.makeText(getApplicationContext(),
"oh,no,SD卡不存在",Toast.LENGTH_SHORT).show();
returnnull;
}
FilemediaStorageDir=
newFile(Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
,"MyPictures");
if(!mediaStorageDir.exists()){
if(!mediaStorageDir.mkdirs()){
Log.i("MyPictures",
"創(chuàng)建圖片存儲路徑目錄失敗");
Log.i("MyPictures",
"mediaStorageDir:"+mediaStorageDir.getPath());
returnnull;
}
}
Filefile=
newFile(getFilePath(mediaStorageDir,fileType));
returnfile;
}
//生成輸出文件路徑
privateStringgetFilePath(FilemediaStorageDir,
intfileType){
StringtimeStamp=newSimpleDateFormat("yyyyMMdd_HHmmss")
.format(newDate());
StringfilePath=mediaStorageDir.getPath()+File.separator;
if(fileType==TYPE_FILE_IMAGE){
filePath+=("IMG_"+timeStamp+
".jpg");
}elseif(fileType==TYPE_FILE_VEDIO){
filePath+=("VIDEO_"+timeStamp+
".mp4");
}else{
returnnull;
}
returnfilePath;
}
二、用自定義的相機檢測相機設(shè)備是否存在:?12345678/*檢測相機是否存在*/
privatebooleancheckCameraHardWare(Contextcontext){
PackageManagerpackageManager=context.getPackageManager();
if(packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)){
returntrue;
}
returnfalse;
}
按鈕按下之后的判斷:?12345678910111213findViewById(R.id.myapp_camera_btn).setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
if(checkCameraHardWare(getApplicationContext())){
Intentintent=
newIntent(getApplicationContext(),MyCameraActivity.class);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(),
"沒有相機存在",Toast.LENGTH_SHORT).show();
}
}
});
自定義的SurfaceView類:?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172packagecn.panghu.camera;
importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Rect;importandroid.hardware.Camera;importandroid.util.AttributeSet;importandroid.view.Surface;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;
publicclassMySurfaceView
extendsSurfaceView
implementsSurfaceHolder.Callback{
privateCameracamera=
null;
privateSurfaceHoldersurfaceHolder=
null;
publicMySurfaceView(Contextcontext,Cameracamera){
super(context);
this.camera=camera;
surfaceHolder=getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
publicMySurfaceView(Contextcontext){
super(context);
//TODOAuto-generatedconstructorstub
}
@Override
publicvoidsurfaceCreated(SurfaceHolderholder){
try{
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch(Exceptione){
e.printStackTrace();
}
}
@Override
publicvoidsurfaceChanged(SurfaceHolderholder,
intformat,
intwidth,
intheight){
//根本沒有可處理的SurfaceView
if(surfaceHolder.getSurface()==
null){
return;
}
//先停止Camera的預(yù)覽
try{
camera.stopPreview();
}catch(Exceptione){
e.printStackTrace();
}
//這里可以做一些我們要做的變換。
//重新開啟Camera的預(yù)覽功能
try{
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch(Exceptione){
e.printStackTrace();
}
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolderholder){
}
}自定義相機Activity類:(為了避免當(dāng)用戶按下Home鍵,之后再回到我們App中,SurfaceView變黑屏,我們需要將SurfaceView加載到FrameLayout中的代碼寫在onResume中)?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200packagecn.panghu.camera;
importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.Date;
importandroid.app.Activity;importandroid.hardware.Camera;importandroid.hardware.Camera.PictureCallback;import.Uri;importandroid.os.Bundle;importandroid.os.Environment;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.FrameLayout;importandroid.widget.Toast;
importcom.example.camerademoapp.R;
publicclassMyCameraActivity
extendsActivity{
privateButtonbtn_camera_capture=
null;
privateButtonbtn_camera_cancel=
null;
privateButtonbtn_camera_ok=
null;
privateCameracamera=
null;
privateMySurfaceViewmySurfaceView=
null;
privatebyte[]buffer=
null;
privatefinalintTYPE_FILE_IMAGE=
1;
privatefinalintTYPE_FILE_VEDIO=
2;
privatePictureCallbackpictureCallback=
newPictureCallback(){
@Override
publicvoidonPictureTaken(byte[]data,Cameracamera){
if(data==
null){
Log.i("MyPicture",
"picturetakendata:null");
}else{
Log.i("MyPicture",
"picturetakendata:"+data.length);
}
buffer=
newbyte[data.length];
buffer=data.clone();
}
};
@Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
setContentView(R.layout.mycamera_layout);
btn_camera_capture=(Button)findViewById(R.id.camera_capture);
btn_camera_ok=(Button)findViewById(R.id.camera_ok);
btn_camera_cancel=(Button)findViewById(R.id.camera_cancel);
btn_camera_capture.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
camera.takePicture(null,
null,pictureCallback);
btn_camera_capture.setVisibility(View.INVISIBLE);
btn_camera_ok.setVisibility(View.VISIBLE);
btn_camera_cancel.setVisibility(View.VISIBLE);
}
});
btn_camera_ok.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//保存圖片
saveImageToFile();
camera.startPreview();
btn_camera_capture.setVisibility(View.VISIBLE);
btn_camera_ok.setVisibility(View.INVISIBLE);
btn_camera_cancel.setVisibility(View.INVISIBLE);
}
});
btn_camera_cancel.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
camera.startPreview();
btn_camera_capture.setVisibility(View.VISIBLE);
btn_camera_ok.setVisibility(View.INVISIBLE);
btn_camera_cancel.setVisibility(View.INVISIBLE);
}
});
}
@Override
protectedvoidonPause(){
//TODOAuto-generatedmethodstub
super.onPause();
camera.release();
camera=
null;
}
@Override
protectedvoidonResume(){
//TODOAuto-generatedmethodstub
super.onResume();
if(camera==
null){
camera=getCameraInstance();
}
//必須放在onResume中,不然會出現(xiàn)Home鍵之后,再回到該APP,黑屏
mySurfaceView=
newMySurfaceView(getApplicationContext(),camera);
FrameLayoutpreview=(FrameLayout)findViewById(R.id.camera_preview);
preview.addView(mySurfaceView);
}
/*得到一相機對象*/
privateCameragetCameraInstance(){
Cameracamera=
null;
try{
camera=camera.open();
}catch(Exceptione){
e.printStackTrace();
}
returncamera;
}
//-----------------------保存圖片---------------------------------------
privatevoidsaveImageToFile(){
Filefile=getOutFile(TYPE_FILE_IMAGE);
if(file==
null){
Toast.makeText(getApplicationContext(),
"文件創(chuàng)建失敗,請檢查SD卡讀寫權(quán)限",Toast.LENGTH_SHORT).show();
return;
}
Log.i("MyPicture",
"自定義相機圖片路徑:"+file.getPath());
Toast.makeText(getApplicationContext(),
"圖片保存路徑:"+file.getPath(),Toast.LENGTH_SHORT).show();
if(buffer==
null){
Log.i("MyPicture",
"自定義相機Buffer:null");
}else{
try{
FileOutputStreamfos=
newFileOutputStream(file);
fos.write(buffer);
fos.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
//-----------------------生成Uri---------------------------------------
//得到輸出文件的URI
privateUrigetOutFileUri(intfileType){
returnUri.fromFile(getOutFile(fileType));
}
//生成輸出文件
privateFilegetOutFile(intfileType){
StringstorageState=Environment.getExternalStorageState();
if(Environment.MEDIA_REMOVED.equals(storageState)){
Toast.makeText(getApplicationContext(),
"oh,no,SD卡不存在",Toast.LENGTH_SHORT).show();
returnnull;
}
FilemediaStorageDir=
newFile(Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
,"MyPictures");
if(!mediaStorageDir.exists()){
if(!mediaStorageDir.mkdirs()){
Log.i("MyPictures",
"創(chuàng)建圖片存儲路徑目錄失敗");
Log.i("MyPictures",
"mediaStorageDir:"+mediaStorageDir.getPath());
returnnull;
}
}
Filefile=
newFile(getFilePath(mediaStorageDir,fileType));
returnfile;
}
//生成輸出文件路徑
privateStringgetFilePath(FilemediaStorageDir,
intfileType){
StringtimeStamp=newSimpleDateFormat("yyyyMMdd_HHmmss")
.format(newDate());
StringfilePath=mediaStorageDir.getPath()+File.separator;
if(fileType==TYPE_FILE_IMAGE){
filePath+=("IMG_"+timeStamp+
".jpg");
}elseif(fileType==TYPE_FILE_VEDIO){
filePath+=("VIDEO_"+timeStamp+
".mp4");
}else{
returnnull;
}
returnfilePath;
}
}2月12日北京OSC源創(chuàng)會——開源技術(shù)的年終盛典?
Intentintent=newIntent(MediaStore.ACTION_VIDEO_CAPTURE);
videopath=Environment.getExternalStorageDirectory().toString()+"/abc/";
Log.i("DareDream",videopath);
StringfileName=newSimpleDateFormat("yyyyMMddHHmmss").format(newDate())+".3gp";
Fileout=newFile(videopath);
if(!out.exists()){
out.mkdirs();
}
out=newFile(videopath,fileName);
videopath=videopath+fileName;
Uriuri=Uri.fromFile(out);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
intent.putExt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 博士生職業(yè)規(guī)劃
- 航空維修質(zhì)量管理與控制指南
- 旅游民宿業(yè)經(jīng)營與服務(wù)規(guī)范
- 企業(yè)環(huán)境管理操作手冊
- 2026年口腔醫(yī)療管理公司員工宿舍管理制度
- 2026年劇本殺運營公司應(yīng)付賬款管理制度
- 2026年劇本殺運營公司數(shù)字化轉(zhuǎn)型管理制度
- 云計算技術(shù)概述
- 2025年金融科技領(lǐng)域人工智能客服系統(tǒng)開發(fā)應(yīng)用前景分析
- 新型環(huán)保包裝機械研發(fā)項目2025年市場潛力可行性研究報告
- 福建省廈門市部分學(xué)校2025-2026學(xué)年九年級歷史上學(xué)期期末聯(lián)考試卷(含答案)
- 2025浙江杭州臨平環(huán)境科技有限公司招聘49人筆試模擬試題及答案解析
- 2026年浙江省軍士轉(zhuǎn)業(yè)崗位履職能力考點練習(xí)題及答案
- 生活垃圾焚燒廠運管管理規(guī)范
- 江蘇省南京市2025-2026學(xué)年八年級上學(xué)期期末數(shù)學(xué)模擬試卷(蘇科版)(解析版)
- 箱式變電站安裝施工工藝
- 2025年安徽省普通高中學(xué)業(yè)水平合格性考試數(shù)學(xué)試卷(含答案)
- 油罐圍欄施工方案(3篇)
- 國家開放大學(xué)2025年(2025年秋)期末考試真題及答案
- JJF 2333-2025恒溫金屬浴校準(zhǔn)規(guī)范
- 盤箱柜施工方案
評論
0/150
提交評論