2014-03-26 80 views
0

我正在使用以下代碼來點擊按鈕上的照片。在android中使用相機拍攝意圖

package com.example.clickpic; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 
int TAKE_PHOTO_CODE = 0; 
public static int count=0; 
private ImageView imageView; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

//here,we are making a folder named picFolder to store pics taken by the camera using this application 
    final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/"; 
    File newdir = new File(dir); 
    newdir.mkdirs(); 
    this.imageView = (ImageView)this.findViewById(R.id.imageView1); 
    Button capture = (Button) findViewById(R.id.btnCapture); 
    capture.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 

     // here,counter will be incremented each time,and the picture taken by camera will be stored as 1.jpg,2.jpg and likewise. 
     count++; 
     String file = dir+count+".jpg"; 
     File newfile = new File(file); 
     try { 
      newfile.createNewFile(); 
     } catch (IOException e) {}  

     Uri outputFileUri = Uri.fromFile(newfile); 

     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, 1888); 
    } 
}); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1888 && resultCode == RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
    } 
} 

} 

該代碼工作得很好,但它只是打開了相機的活動。我必須做些什麼才能使按鈕點擊,它點擊圖片並保存

現在,這只是打開手機的相機應用程序,並期望我點擊圖片,然後單擊確定。我不想要這些東西。

所有我想要的是,當我從我的應用程序點擊該按鈕,應該點擊圖片未經我期望任何額外的輸入。

編輯:我已經試圖創建一個我自己的相機應用程序,但我遇到了一些問題。 這就是爲什麼我正在嘗試這種方法。 Camera API not working on KITKAT

任何幫助,將不勝感激。提前致謝。

+0

然後考慮創建自己的相機的活動 –

+0

我試圖這樣做,以及..但我遇到了一些問題http://stackoverflow.com/questions/22625904/cam時代-API - 不工作-ON-奇巧。請幫我解決這個問題 – SoulRayder

回答

1

我只想要的是,當我點擊我的應用程序中的按鈕時,它應該點擊一張圖片,而不需要任何額外的輸入。 -

它沒有達到相機意圖android.provider.MediaStore.ACTION_IMAGE_CAPTURE。您必須在您的代碼中實現相機接口部分,而無需使用Device的本機相機應用程序。

看的Building Camera App

+0

我也試過這樣做,但是我遇到了一些問題stackoverflow.com/questions/22625904/...。請幫我解決這個 – SoulRayder

+0

這篇文章可能也有幫助http://androideasylessons.blogspot.in/2012/09/take-photo-without-intent-in-android.html – Droidman

+0

另外http://developer.android.com/培訓/相機/ cameradirect.html和http://www.tutorialspoint.com/android/android_camera.htm – user370305

1

我已經寫了照相機類這需要圖像部分,排列取向(一些設備需要照片水平爲默認值),並保存拍攝的照片。您可以從下面的鏈接檢查:

Camera capture orientation on samsung devices in android

編輯:對不起,savePhoto功能,沒有記在我的例子。現在添加它們。

savePhoto功能:

public void savePhoto(Bitmap bmp) { 

    imageFileFolder = new File(Environment.getExternalStorageDirectory(), 
      cc.getDirectoryName()); 
    imageFileFolder.mkdir(); 
    FileOutputStream out = null; 
    Calendar c = Calendar.getInstance(); 
    String date = fromInt(c.get(Calendar.MONTH)) 
      + fromInt(c.get(Calendar.DAY_OF_MONTH)) 
      + fromInt(c.get(Calendar.YEAR)) 
      + fromInt(c.get(Calendar.HOUR_OF_DAY)) 
      + fromInt(c.get(Calendar.MINUTE)) 
      + fromInt(c.get(Calendar.SECOND)); 
    imageFileName = new File(imageFileFolder, date.toString() + ".jpg"); 
    try { 
     out = new FileOutputStream(imageFileName); 
     bmp.compress(Bitmap.CompressFormat.JPEG, 70, out); 
     out.flush(); 
     out.close(); 
     scanPhoto(imageFileName.toString()); 
     out = null; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

scanPhoto功能:

public void scanPhoto(final String imageFileName) { 
    geniusPath = imageFileName; 
    msConn = new MediaScannerConnection(MyClass.this, 
      new MediaScannerConnectionClient() { 
       public void onMediaScannerConnected() { 
        msConn.scanFile(imageFileName, null); 

       } 

       @Override 
       public void onScanCompleted(String path, Uri uri) { 

        msConn.disconnect(); 

       } 
      }); 
    msConn.connect(); 
} 

SavePhotoTask類:

class SavePhotoTask extends AsyncTask<byte[], String, String> { 
    @Override 
    protected String doInBackground(byte[]... jpeg) { 
     File photo = new File(Environment.getExternalStorageDirectory(), 
       "photo.jpg"); 
     if (photo.exists()) { 
      photo.delete(); 
     } 
     try { 
      FileOutputStream fos = new FileOutputStream(photo.getPath()); 
      fos.write(jpeg[0]); 
      fos.close(); 
     } catch (java.io.IOException e) { 
     } 
     return (null); 
    } 
} 
相關問題