真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android調(diào)用拍照,android 拍照

Android WebView 調(diào)用系統(tǒng)拍照和相冊(cè)

由于業(yè)務(wù)需要,APP內(nèi)嵌H5,需要調(diào)去系統(tǒng)相冊(cè)和拍照,網(wǎng)上找了點(diǎn)資料,整理一下,供大家參考:

成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、都昌網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、都昌網(wǎng)絡(luò)營(yíng)銷(xiāo)、都昌企業(yè)策劃、都昌品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供都昌建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18982081108,官方網(wǎng)址:www.cdcxhl.com

private static final int REQUEST_CAMERA =1;

private static final int REQUEST_CHOOSE =2;

private ValueCallbackmUploadMessage;

private ValueCallbackmUploadMessagesAboveL;

private UricameraUri;

//5.0以后的方法

webView.setWebChromeClient(new WebChromeClient() {

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {

if (mUploadMessagesAboveL !=null) {

mUploadMessagesAboveL.onReceiveValue(null);

? ? ? ? mUploadMessagesAboveL =null;

? ? }else {

mUploadMessagesAboveL = filePathCallback;

? ? ? ? selectImage();

? ? }

return true;

}

});

//選擇圖片和拍照,對(duì)應(yīng)的string文件,可以自己寫(xiě)死:拍照,相冊(cè),取消

private void selectImage() {

ActionSheet.createBuilder(this, getSupportFragmentManager()).

setOtherButtonTitles(new String[]{getResources().getString(R.string.common_tip_photos), getResources().getString(R.string.common_picture)}).

setCancelButtonTitle(getResources().getString(R.string.common_cancel)).setCancelableOnTouchOutside(true).setListener(new ActionSheet.ActionSheetListener() {

public void onDismiss(ActionSheet actionSheet, boolean isCancel) {

if (mUploadMessage !=null) {

mUploadMessage.onReceiveValue(null);

? ? ? ? ? ? mUploadMessage =null;

? ? ? ? }

if (mUploadMessagesAboveL !=null) {

mUploadMessagesAboveL.onReceiveValue(null);

? ? ? ? ? ? mUploadMessagesAboveL =null;

? ? ? ? }

actionSheet.dismiss();

? ? }

@RequiresApi(api = Build.VERSION_CODES.M)

public void onOtherButtonClick(ActionSheet actionSheet, int index) {

switch (index) {

case 0:

chosePicture();

break;

? ? ? ? ? ? case 1:

setRequestCamera();

? ? ? ? }

}

}).show();

}

//拍照,添加權(quán)限申請(qǐng)? 這個(gè)可以自己寫(xiě)下,我這邊是項(xiàng)目中寫(xiě)好的,直接拿過(guò)來(lái)用了

public void setRequestCamera() {

permissionsBuilder =new YXTPermissionsBuilder.Builder(this)

.setOnGrantedListener((requestCode, perms) - {

openCamera();

? ? ? ? })

.setRationale4NeverAskAgain(LanguageUtils.isEnglish() ? String.format(getString(R.string.permission_tips), getString(R.string.common_camera), getString(R.string.app_name), getString(R.string.app_name)) :

String.format(getString(R.string.permission_tips), getString(R.string.app_name), getString(R.string.common_camera), getString(R.string.app_name)))

//必需

? ? ? ? .setRequestCode(ConstantsData.GET_CAMERA)

.build();

permissionsBuilder.requestPermissions(Manifest.permission.CAMERA);

}

/**

* 本地相冊(cè)選擇圖片

*/

private void chosePicture() {

Intent innerIntent =new Intent(Intent.ACTION_GET_CONTENT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

innerIntent.setType("image/*");

Intent wrapperIntent = Intent.createChooser(innerIntent, null);

startActivityForResult(wrapperIntent, REQUEST_CHOOSE);

}

/**

* 打開(kāi)照相機(jī)

*/

private void openCamera() {

Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

String imagePaths = Environment.getExternalStorageDirectory().getPath() +"/pbccrc/Images/" + (System.currentTimeMillis() +".jpg");

// 必須確保文件夾路徑存在,否則拍照后無(wú)法完成回調(diào)

File vFile =new File(imagePaths);

if (!vFile.exists()) {

File vDirPath = vFile.getParentFile();

? ? vDirPath.mkdirs();

}else {

if (vFile.exists()) {

vFile.delete();

? ? }

}

cameraUri = FileProvider.getUriForFile(

this,

? ? ? ? getPackageName() +".fileprovider",

? ? ? ? vFile);

intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);

startActivityForResult(intent, REQUEST_CAMERA);

}

/**

* 選擇照片后結(jié)束

*

* @param data

*/

private UriafterChosePic(Intent data) {

if (data !=null) {

final String path = data.getData().getPath();

? ? if (path !=null (path.endsWith(".png") || path.endsWith(".PNG") || path.endsWith(".jpg") || path.endsWith(".JPG"))) {

return data.getData();

? ? }else {

Toast.makeText(this, "上傳的圖片僅支持png或jpg格式", Toast.LENGTH_SHORT).show();

? ? }

}

return null;

}

/**

* 返回文件選擇

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

if (mUploadMessagesAboveL !=null) {

onActivityResultAboveL(requestCode, resultCode, intent);

}

if (mUploadMessage ==null)return;

Uri uri =null;

if (requestCode ==REQUEST_CAMERA resultCode ==RESULT_OK) {

uri =cameraUri;

? ? Log.e("onActivityResult: " + uri.toString());

}

if (requestCode ==REQUEST_CHOOSE resultCode ==RESULT_OK) {

uri = afterChosePic(intent);

}

mUploadMessage.onReceiveValue(uri);

mUploadMessage =null;

super.onActivityResult(requestCode, resultCode, intent);

}

/**

* 5.0以后機(jī)型 返回文件選擇

*

* @param requestCode

* @param resultCode

* @param data

*/

private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {

Uri[] results =null;

if (requestCode ==REQUEST_CAMERA resultCode ==RESULT_OK) {

results =new Uri[]{cameraUri};

}

if (requestCode ==REQUEST_CHOOSE resultCode ==RESULT_OK) {

if (data !=null) {

String dataString = data.getDataString();

? ? ? ? if (dataString !=null)

results =new Uri[]{Uri.parse(dataString)};

? ? }

}

mUploadMessagesAboveL.onReceiveValue(results);

mUploadMessagesAboveL =null;

return;

}

基本都可以拿去用了,希望有幫助

Android調(diào)用系統(tǒng)相機(jī)實(shí)現(xiàn)拍照和視頻錄制

(1)申請(qǐng)權(quán)限

(2)設(shè)置布局

這里做了一個(gè)簡(jiǎn)單的布局:添加了一個(gè)按鈕和一個(gè)ImageView控件用于顯示拍攝的圖像。

(3)為按鈕添加點(diǎn)擊事件監(jiān)聽(tīng)

點(diǎn)擊按鈕時(shí),調(diào)用系統(tǒng)相機(jī)進(jìn)行拍照,并在確定后將圖像顯示在ImageView控件中。

(1)申請(qǐng)權(quán)限

(2)設(shè)置布局

添加了一個(gè)按鈕和一個(gè)VideoView控件用于顯示錄制的視頻。

(3)為按鈕添加點(diǎn)擊事件監(jiān)聽(tīng)

同前面一樣,點(diǎn)擊按鈕后調(diào)用系統(tǒng)相機(jī)進(jìn)行錄制視頻,錄制完成后點(diǎn)擊確定即可將錄制的視頻顯示在VideoView控件中。

對(duì)于Android11.0的版本,在調(diào)用系統(tǒng)相近進(jìn)行視頻錄制的時(shí)候,即使在AndroidMenifest.xml中申請(qǐng)了CAMERA權(quán)限,還是會(huì)在程序運(yùn)行時(shí)報(bào)錯(cuò): Permission? Denial , ? . .... ....? with revoked permission android.permission.CAMERA

解決方法是在程序中動(dòng)態(tài)申請(qǐng)權(quán)限:

寫(xiě)在最后:文章是在學(xué)習(xí)過(guò)程中做的學(xué)習(xí)筆記,同時(shí)與志同道合者分享,文章內(nèi)容均經(jīng)過(guò)我自己實(shí)驗(yàn)證實(shí)可行,如有問(wèn)題歡迎留言,很高興一起交流討論,共同進(jìn)步!

Android調(diào)用系統(tǒng)相機(jī)拍照

Refrence:

Android 調(diào)用系統(tǒng)相機(jī)拍照適配主要經(jīng)歷了 6.0 7.0 10和11這幾個(gè)大版本:

其中:

常用到的為 external-path 和 external-files-path,name和path按照自己需求編寫(xiě)

上述示例意思是,external-path標(biāo)簽指向的路徑后path中指向的文件/文件夾擁有被訪(fǎng)問(wèn)權(quán)限,即 /storage/emulate/0/000 這個(gè)路徑擁有被訪(fǎng)問(wèn)的權(quán)限。

簡(jiǎn)單示例:

Android調(diào)用手機(jī)相機(jī)拍照,保存圖片會(huì)出現(xiàn)2張解決辦法。

最近項(xiàng)目中使用系統(tǒng)相機(jī)拍照,保存圖片,發(fā)現(xiàn)一些問(wèn)題。

??讀取圖片旋轉(zhuǎn)角度,然后再旋轉(zhuǎn)回去。

?? 使用BitmapFactory.Options,能更準(zhǔn)確的獲取圖片格式,

???判斷地址末尾 .gif 有時(shí)候會(huì)不準(zhǔn)確(不推薦)

??上傳服務(wù)器,一般使用地址,但是用戶(hù)手動(dòng)刪除圖片后,地址是無(wú)效的。為了防止地址無(wú)效,可以對(duì)需要上傳圖片地址做保存,但又希望系統(tǒng)讀取不到,可以對(duì)保存地址進(jìn)行修改。

??讀取圖片地址api

??我們可以去系統(tǒng)相冊(cè)查看兩張圖片,會(huì)發(fā)現(xiàn)兩張圖片的地址是不一樣的,而且兩張圖片的大小也不同。

出現(xiàn)2張的原因是:

?(1)調(diào)用系統(tǒng)相機(jī),拍照完成我們會(huì)生成一個(gè)保存地址,而這個(gè)地址是: /storage/android/data/包名/Picture/ ,這張是我們保存的拍照?qǐng)D片。

?(2)相同的一張圖片在哪?這個(gè)地址是:/storage/Pictures/ ,這張圖片是系統(tǒng)復(fù)制的App目錄下Pictures中的圖片。

??所以就會(huì)出現(xiàn)在系統(tǒng)相冊(cè)兩張圖片,但兩張圖片大小不一致,地址不同。

??調(diào)用系統(tǒng)api,只能讀取到一張,是系統(tǒng)復(fù)制的那張,也就是 /storage/Pictures/ 目錄下的這張,但是/storage/android/data/包名/Picture/ 目錄下的沒(méi)有讀取到。

??知道了問(wèn)題,就有解決辦法,可分為三種方法:

?(1)第一種方法:

?????保存圖片的時(shí)候,修改下地址(可參照標(biāo)題 3 ,這樣讓系統(tǒng)無(wú)法識(shí)別出這張圖片),結(jié)果就是,我讀取不到,系統(tǒng)也別想讀取不到,在系統(tǒng)相冊(cè)里也就看不到這張圖片。

?(2)第二種方法:

?????因?yàn)閍pi無(wú)法讀取到,那我們就直接再讀取/storage/android/data/包名/Picture/ 下的文件,把圖片一塊加入到同一個(gè)集合中用于展示,這樣所有的圖片都有了,但是系統(tǒng)相冊(cè)中還是有兩張圖片,為解決這個(gè)問(wèn)題。

?(3)第三種方法:( )

?????在我們保存圖片的時(shí)候,直接保存到 /storage/Pictures/ 這個(gè)目錄下,也不用系統(tǒng)幫我們復(fù)制了,這樣就只會(huì)出現(xiàn)一張,而且我們也能調(diào)用api直接讀取到,兩個(gè)問(wèn)題全都解決了,完美!

?

?

(如果以上有錯(cuò)誤或者有更優(yōu)美的方式,感謝指出并改之,與君共勉)

這是我項(xiàng)目中出現(xiàn)的問(wèn)題,希望能夠幫助到你,Thanks,Bye!


標(biāo)題名稱(chēng):android調(diào)用拍照,android 拍照
地址分享:http://weahome.cn/article/phheis.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部