導航:首頁 > 操作系統 > android調用系統相機保存圖片

android調用系統相機保存圖片

發布時間:2022-08-19 01:29:10

A. android 開發調用系統相機為什麼只顯示最近相冊,系統的相冊哪去了

系統已經有的東西,如果我們沒有新的需求的話,直接調用是最直接的。下面講講調用系統相機拍照並保存圖片和如何調用系統相冊的方法。
首先看看調用系統相機的核心方法:
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camera, 100);
相機返回的數據通過下面的回調方法取得,並處理

復制代碼
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(requestCode == CAMERA && resultCode == Activity.RESULT_OK && null != data){
Bundle bundle = data.getExtras();
//獲取相機返回的數據,並轉換為圖片格式
Bitmap bitmap = (Bitmap)bundle.get("data");
}
}
復制代碼
下面是調用系統相冊並取得照片的方法:
Intent picture = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(picture, 101);
或者
intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
((Activity) context).startActivityForResult(intent, 101);
下面是相應的回調方法:

復制代碼
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(requestCode == 101 && resultCode == Activity.RESULT_OK && null != data){

Uri selectedImage = data.getData();
String[] filePathColumns={MediaStore.Images.Media.DATA};
Cursor c = this.getContentResolver().query(selectedImage, filePathColumns, null,null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePathColumns[0]);
String picturePath= c.getString(columnIndex);
c.close();
}
}
復制代碼
或者

復制代碼
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case 101:
Uri uri = data.getData();
Cursor cursor = this.getContentResolver().query(uri, null,
null, null, null);
cursor.moveToFirst();
String imgNo = cursor.getString(0); // 圖片編號
String imgPath = cursor.getString(1); // 圖片文件路徑
String imgSize = cursor.getString(2); // 圖片大小
String imgName = cursor.getString(3); // 圖片文件名
cursor.close();
Bitmap bitmap = BitmapFactory.decodeFile(imgPath);
break;

default:
return;
}
}
}

B. android 調用系統照相機,保存後回到前一個activity

修改相機源碼編譯,因為相機返回功能是點2次,保存並沒有退出動作,這個不改源碼或者在相機源碼裡面加Intent 是做不到這種效果的 。 我剛想了下,在廣播或者Service裡面加 OnKeyDown 方法 ,但是廣播和service沒有這方法,所以不能夠靠監聽到 返回鍵的鍵值 4 ,從而直接 Intent到 A activity的功能就無法實現 ,所以建議修改相機源碼,即可實現 。 如果是純應用, 抱歉,能想的都想了,實現不了。

C. 一個關於android的問題,我通過下面的方法調用相機,可是怎麼可以在拍照結束後獲取照片的路徑呢

Android調用系統拍照的代碼:

  1. 創建Intent Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    String imagePath = Environment.getExternalStorageDirectory() + "/image" ;

  2. 設置文件路徑 File file = new File(imagePath);

    if(!file.exists()){

    file.mkdirs(); }

  3. 設置URI,指定相冊拍照後保存圖片的路徑,Uri imageUri = Uri.fromFile(new File(imagePath, "image.jsp"));

    openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

    startActivityForResult(openCameraIntent, REQUEST_CODE_TAKING_PICTURES);

  4. 拍照完以後,文件就會保存在這個指定的目錄下了。Uri 里指定了相機拍照的路徑。

D. android 調用系統相機,不拍照直接按返回會怎麼樣

@Override
/*處理拍照完成後,傳遞數值事件*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (requestCode != 0) {
return;
}
//加上這個判斷就好了
if(resultCode==Activity.RESULT_CANCELED)
{
Intent it =new Intent(getApplicationContext(), GrenxxActivity.class);
it.putExtra("uno",uno);
startActivity(it);
finish();
return;
}

E. android 怎麼調用系統相機

這個很簡單的,網路到處都有答案:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private Button button;
private ImageView view;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
view= (ImageView)findViewById(R.id.imageView1);
button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
});
}

@SuppressLint("SdCardPath")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 檢測sd是否可用
Log.i("TestFile",
"SD card is not avaiable/writeable right now.");
return;
}
new DateFormat();
String name = DateFormat.format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA)) + ".jpg";
Toast.makeText(this, name, Toast.LENGTH_LONG).show();
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 獲取相機返回的數據,並轉換為Bitmap圖片格式

FileOutputStream b = null;
File file = new File("/sdcard/Image/");
file.mkdirs();// 創建文件夾
String fileName = "/sdcard/Image/"+name;

try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把數據寫入文件
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try
{
view.setImageBitmap(bitmap);// 將圖片顯示在ImageView里
}catch(Exception e)
{
Log.e("error", e.getMessage());
}

}
}
}

F. Android開發中怎麼將照片存儲到系統相冊中

java">//創建輸出流,指向SD卡的Pictures文件夾
finalFiledirectory=Environment.(Environment.DIRECTORY_DCIM);
//創建保存的文件
Filefile=newFile(directory,"test.png");
FileOutputStreamout=null;
try{
out=newFileOutputStream(file);

}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{

}
//bitmap就是你的圖片
bitmap.compress(Bitmap.CompressFormat.PNG,100,out);

G. android系統如何調用自帶的相機相冊

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="gallery"
android:text="獲取圖庫圖片" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="camera"
android:text="拍照獲取圖片" />

<ImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

//------------------我的MainActivity --------------也很簡單--------------------------

package tackpicture.bwie.com.tackpicture;

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.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.io.File;

public class MainActivity extends AppCompatActivity {

private ImageView iv_image;

private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照
private static final int PHOTO_REQUEST_GALLERY = 2;// 從相冊中選擇
private static final int PHOTO_REQUEST_CUT = 3;// 結果
/* 頭像名稱 */
private static final String PHOTO_FILE_NAME = "temp_photo.jpg";
private File tempFile;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控制項
iv_image = (ImageView) findViewById(R.id.iv_image);
}

//圖庫
public void camera(View view) {
// 激活系統圖庫,選擇一張圖片
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
// 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_GALLERY
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
}

//相機
public void gallery(View view) {
// 激活相機
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 判斷存儲卡是否可以用,可用進行存儲
if (hasSdcard()) {
tempFile = new File(Environment.getExternalStorageDirectory(), PHOTO_FILE_NAME);
// 從文件中創建uri
Uri uri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
}
// 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_CAREMA
startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
}

/*
* 剪切圖片
*/
private void crop(Uri uri) {
// 裁剪圖片意圖
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 裁剪後輸出圖片的尺寸大小
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);

intent.putExtra("outputFormat", "JPEG");// 圖片格式
intent.putExtra("noFaceDetection", true);// 取消人臉識別
intent.putExtra("return-data", true);
// 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_CUT
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}

/*
* 判斷sdcard是否被掛載
*/
private boolean hasSdcard() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PHOTO_REQUEST_GALLERY) {
// 從相冊返回的數據
if (data != null) {
// 得到圖片的全路徑
Uri uri = data.getData();
crop(uri);
}
} else if (requestCode == PHOTO_REQUEST_CAREMA) {
// 從相機返回的數據
if (hasSdcard()) {
crop(Uri.fromFile(tempFile));
} else {
Toast.makeText(MainActivity.this, "未找到存儲卡,無法存儲照片!", 0).show();
}

} else if (requestCode == PHOTO_REQUEST_CUT) {
// 從剪切圖片返回的數據
if (data != null) {
Bitmap bitmap = data.getParcelableExtra("data");
this.iv_image.setImageBitmap(bitmap);
}
try {
// 將臨時文件刪除
tempFile.delete();
} catch (Exception e) {
e.printStackTrace();
}

}

super.onActivityResult(requestCode, resultCode, data);
}

}

H. android,調用系統相機拍完照片並保存另一個activity 上,後退時,最初的activity卻被系統銷毀,怎麼辦

離開了只是暫時掛起activity,系統不會隨便銷毀activity的,除非你自己寫了finish或者內存不足了

I. 如何在安卓應用中調用相機

相機使用基礎之 調用系統中的相機應用

通過Intent直接調用系統相機
直接調用系統的相機應用,只需要在Intent對象中傳入相應的參數即可,總體來說需要以下三步:
1. Compose a Camera Intent
MediaStore.ACTION_IMAGE_CAPTURE 拍照;
MediaStore.ACTION_VIDEO_CAPTURE錄像。

2. Start the Camera Intent
使用startActivityForResult()方法,並傳入上面的intent對象。
之後,系統自帶的相機應用就會啟動,用戶就可以用它來拍照或者錄像。

3. Receive the Intent Result
用onActivityResult()接收傳回的圖像,當用戶拍完照片或者錄像,或者取消後,系統都會調用這個函數。

關於接收圖像
如果不設置接收圖像的部分,拍照完畢後將會返回到原來的activity,相片會自動存儲在拍照應用的默認存儲位置。

為了接收圖像,需要做以下幾個工作:
1.指定圖像的存儲位置,一般圖像都是存儲在外部存儲設備,即SD卡上。
你可以考慮的標準的位置有以下兩個:
Environment.(Environment.DIRECTORY_PICTURES)
這個方法返回圖像和視頻的標准共享位置,別的應用也可以訪問,如果你的應用被卸載了,這個路徑下的文件是會保留的。
為了區分,你可以在這個路徑下為你的應用創建一個子文件夾。
Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
這個方法返回的路徑是和你的應用相關的一個存儲圖像和視頻的方法。
如果應用被卸載,這個路徑下的東西全都會被刪除。
這個路徑沒有什麼安全性限制,別的應用也可以自由訪問裡面的文件。

2.為了接收intent的結果,需要覆寫activity中的 onActivityResult() 方法。
前面說過,可以不設置相機返回的圖像結果的操作,此時在startActivityForResult()中不需要給intent傳入額外的數據,這樣在onActivityResult()回調時,返回的Intent data不為null,照片存在系統默認的圖片存儲路徑下。
但是如果想得到這個圖像,你必須制定要存儲的目標File,並且把它作為URI傳給啟動的intent,使用MediaStore.EXTRA_OUTPUT作為關鍵字。
這樣的話,拍攝出來的照片將會存在這個特殊指定的地方,此時沒有thumbnail會被返回給activity的回調函數,所以接收到的Intent data為null。

J. android 調用系統照相機拍照後獲得圖片路徑

{privateUrimOutPutFileUri;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ButtontakePiCButton=(Button)this.findViewById(R.id.button1);
takePiCButton.setOnClickListener(this);
}

@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.button1:
saveFullImage();
break;

default:
break;
}
}

privatevoidsaveFullImage(){
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
//文件夾aaaa
Stringpath=Environment.getExternalStorageDirectory().toString()+"/aaaa";
Filepath1=newFile(path);
if(!path1.exists()){
path1.mkdirs();
}
Filefile=newFile(path1,System.currentTimeMillis()+".jpg");
mOutPutFileUri=Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT,mOutPutFileUri);
startActivityForResult(intent,1);

}

@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==1){
UriimageUri=null;
if(data!=null){
if(data.hasExtra("data")){
Bitmapthunbnail=data.getParcelableExtra("data");
//處理縮略圖
}
}else{
//處理mOutPutFileUri中的完整圖像
}

}
}
}
閱讀全文

與android調用系統相機保存圖片相關的資料

熱點內容
壓縮空氣氣閥卡死 瀏覽:787
江蘇加密優盤公司 瀏覽:650
linuxiso製作u盤啟動盤 瀏覽:622
公網伺服器如何變成nas 瀏覽:696
區塊鏈抗量子加密 瀏覽:1000
文件夾顯示字體怎麼調整 瀏覽:62
沈陽華潤三洋壓縮機官網 瀏覽:898
彩票改演算法 瀏覽:308
雲伺服器不便宜 瀏覽:216
snort安裝linux 瀏覽:173
java多個項目 瀏覽:729
win服務安裝編程 瀏覽:879
如何關閉魅族推送伺服器 瀏覽:309
適合手機編程的輸入法 瀏覽:413
三條白色斜杠是什麼app 瀏覽:211
python編程思想pdf 瀏覽:127
ps圖片質量壓縮 瀏覽:802
瀏覽器和伺服器使用什麼協議 瀏覽:824
單片機數碼管的點 瀏覽:576
比特幣的編譯源碼 瀏覽:855