2017-09-16 72 views
-3
package com.example.android.health3; 

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.provider.MediaStore; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MainActivity extends AppCompatActivity { 

    ImageView result; 
    static final int REQUEST_IMAGE_CAPTURE = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button button = (Button) findViewById(R.id.button); 
     result = (ImageView) findViewById(R.id.imageView); 

    } 
    public void dispatchTakePictureIntent() { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
     } 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap imageBitmap = (Bitmap) extras.get("data"); 
      result.setImageBitmap(imageBitmap); 
     } 
    } 

} 

它應該是一個非常簡單的概念。我完全按照從android開發人員處獲得的文檔所說的那樣做,但是這段代碼不會運行...當我按下按鈕拍攝照片時,應用程序停止。試圖讓我的應用程序拍攝照片

請讓我知道,如果你知道爲什麼。 :(

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.android.health3.MainActivity"> 
    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="dispatchTakePictureIntent" 
     android:text="Button" 
     /> 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="208dp" 
     android:layout_height="231dp" 
    /> 

</android.support.constraint.ConstraintLayout> 

文檔:https://developer.android.com/training/camera/photobasics.html

+0

請鏈接文檔。 – xvlcw

+1

分享你的xml佈局和崩潰日誌 –

+0

如果你想用圖像croper讓我知道,我已經爲相機設置了代碼。@ Justin –

回答

0

使用本

public void dispatchTakePictureIntent(View v) { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
     } 
} 

insted的這個

public void dispatchTakePictureIntent() { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
     } 
    } 

不要忘記在清單文件中添加權限

<uses-permission android:name="android.permission.CAMERA"/>

注:

期初的Android 6.0(API等級23),用戶權限授予應用程序的應用程序運行時,而不是當他們安裝應用程序時

瞭解更多信息read from docs

+0

嗨,非常感謝你。它現在有效。但是我可以知道爲什麼你必須將觀點作爲論據嗎?在文檔中的cuz,它不需要參數。 –

+0

@JustinChan檢查此https://stackoverflow.com/questions/4153517/how-exactly-does-the-androidonclick-xml-attribute-differ-from-setonclicklistene,這也是https://stackoverflow.com/a/21326604/7666442 –

1

試試這個

呼叫按鈕此功能takePicture的onclick

private void takePicture() { 


    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); 

    String dateCreated = sdf.format(new Date(System.currentTimeMillis())); 

    f = new File(getExternalCacheDir(), "IMGPLk-" + dateCreated.trim() + ".jpg"); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 

    //intent.putExtra("android.intent.extras.CAMERA_FACING", 1); 

    startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); 

    //finish(); 
} 
0

意向cameraIntent =新意圖(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent,CAMERA_REQUEST);