Java Android中的摄像头问题

Java Android中的摄像头问题,java,android,Java,Android,我正在尝试在我的应用程序中打开camera intent。但我只需要确保图像不会保存在SD卡或内部存储器中。此外,单击图片时,图像应显示在应用程序中 public class FBCheckInActivity extends Activity{ private CallbackManager callbackManager; private LoginManager loginManager; private File mFileTemp; public static final int R

我正在尝试在我的应用程序中打开camera intent。但我只需要确保图像不会保存在SD卡或内部存储器中。此外,单击图片时,图像应显示在应用程序中

public class FBCheckInActivity extends Activity{

private CallbackManager callbackManager;
private LoginManager loginManager;
private File mFileTemp;
public static final int REQUEST_CODE_TAKE_PICTURE = 2;
public String path;
Bitmap sharingPhoto;
String caption="";
ImageView chooseImage;
EditText captionText;
Button postFacebook;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.facebook_sharing);
    printHashKey();
    sharingPhoto= BitmapFactory.decodeResource(this.getResources(), R.drawable.no_image);
    FacebookSdk.sdkInitialize(getApplicationContext());
    fbSharing(sharingPhoto);

}

private void fbSharing(Bitmap sharingPhoto) {
    chooseImage=(ImageView) findViewById(R.id.share_image);
    chooseImage.setImageBitmap(sharingPhoto);
    captionText=(EditText) findViewById(R.id.caption_text);
    postFacebook=(Button) findViewById(R.id.buttonPost);
    postFacebook.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            loginFaceBook();
        }


    });
    chooseImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openCamera();
        }
    });
    captionText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            caption = captionText.getText().toString();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
}

@Override
protected void onResume() {
    super.onResume();
}

protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    if(requestCode==REQUEST_CODE_TAKE_PICTURE){
        Log.d("zambo","after selecting pic");
        path = mFileTemp.getPath();
        Log.d("zambo", path);
        sharingPhoto = BitmapFactory.decodeFile(path);
        chooseImage.setImageBitmap(sharingPhoto);
        fbSharing(sharingPhoto);
    }
    else {
        Log.d("zambo","callback manager for facebook sharing");
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}
public void printHashKey(){
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.urbanwand",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

public void  loginFaceBook(){
    callbackManager = CallbackManager.Factory.create();
    List<String> permissionNeeds = Arrays.asList("publish_actions");
    loginManager = LoginManager.getInstance();

    loginManager.logInWithPublishPermissions(FBCheckInActivity.this, permissionNeeds);
    loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            AccessToken accessToken = loginResult.getAccessToken();
            graphApi(accessToken);
        }

        @Override
        public void onCancel() {
            Toast.makeText(FBCheckInActivity.this, "cancel", Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onError(FacebookException error) {
            Toast.makeText(FBCheckInActivity.this, "error", Toast.LENGTH_SHORT).show();

        }
    });
}
public void openCamera(){
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        Uri mImageCaptureUri = null;
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            mFileTemp = new File(Environment
                    .getExternalStorageDirectory(), "IMG_"
                    + ".jpg");
            mImageCaptureUri = Uri.fromFile(mFileTemp);
        } else {
                    /*
                     * The solution is taken from here:
                     * http://stackoverflow.com/questions
                     * /10042695/how-to-get-camera-result-as-a-uri-in-data-folder
                     */
            mFileTemp = new File(getFilesDir(), "IMG_"
                    + ".jpg");
            mImageCaptureUri = InternalStorageContentProvider.CONTENT_URI;
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
                mImageCaptureUri);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
        //Log.d("User_Photo", "cannot take picture", e);
    }
}
public void graphApi(AccessToken accessToken){
    GraphRequest request = GraphRequest.newUploadPhotoRequest(accessToken, "me/photos", sharingPhoto, caption, null, new GraphRequest.Callback() {
        @Override
        public void onCompleted(GraphResponse response) {
            Log.d("zambo","On Completed Callback");
            AlertDialog.Builder completeDialog = new AlertDialog.Builder(FBCheckInActivity.this);
            completeDialog.setMessage("Thank you for sharing your happiness!!");
            completeDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    startActivity(new Intent(FBCheckInActivity.this, DinerHotSellers.class));
                    overridePendingTransition(0, 0);
                }
            });
            completeDialog.create();
            completeDialog.show();
        }
    });
    request.executeAsync();
}
公共类FBCheckInActivity扩展活动{
私人CallbackManager CallbackManager;
私有LoginManager LoginManager;
私有文件mFileTemp;
公共静态最终整数请求\代码\拍摄\图片=2;
公共字符串路径;
位图共享照片;
字符串标题=”;
图像视图选择图像;
编辑文本标题文本;
按钮postFacebook;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.facebook_共享);
printHashKey();
sharingPhoto=BitmapFactory.decodeResource(this.getResources(),R.drawable.no_image);
sdkinInitialize(getApplicationContext());
FBS共享(共享照片);
}
私有共享(位图共享照片){
选择图像=(图像视图)findViewById(R.id.share\u图像);
选择图像。设置图像位图(共享照片);
captionText=(EditText)findViewById(R.id.caption\u text);
postFacebook=(按钮)findViewById(R.id.buttonPost);
postFacebook.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
loginFaceBook();
}
});
选择图像.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
openCamera();
}
});
addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
caption=captionText.getText().toString();
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
}
@凌驾
受保护的void onResume(){
super.onResume();
}
受保护的void onActivityResult(最终int请求代码、最终int结果代码、最终意图数据){
如果(请求代码==请求代码拍照){
Log.d(“zambo”,“选择pic后”);
path=mFileTemp.getPath();
Log.d(“zambo”,路径);
sharingPhoto=BitmapFactory.decodeFile(路径);
选择图像。设置图像位图(共享照片);
FBS共享(共享照片);
}
否则{
Log.d(“zambo”,“facebook共享回调管理器”);
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}
public void printHashKey(){
试一试{
PackageInfo info=getPackageManager().getPackageInfo(
“com.urbanwand”,
PackageManager.GET_签名);
用于(签名:信息签名){
MessageDigest md=MessageDigest.getInstance(“SHA”);
md.update(signature.toByteArray());
Log.d(“KeyHash:,Base64.encodeToString(md.digest(),Base64.DEFAULT));
}
}捕获(PackageManager.NameNotFounde异常){
}捕获(无算法异常){
}
}
public void loginFaceBook(){
callbackManager=callbackManager.Factory.create();
List permissionNeeds=Arrays.asList(“发布动作”);
loginManager=loginManager.getInstance();
loginManager.logInWithPublishPermissions(FBCheckInActivity.this,PermissionRequirements);
registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
AccessToken AccessToken=loginResult.getAccessToken();
graphApi(accessToken);
}
@凌驾
公开作废{
Toast.makeText(FBCheckInActivity.this,“cancel”,Toast.LENGTH_SHORT.show();
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(FBCheckInActivity.this,“error”,Toast.LENGTH_SHORT.show();
}
});
}
公共摄像机(){
意向意向=新意向(MediaStore.ACTION\u IMAGE\u CAPTURE);
试一试{
Uri mImageCaptureUri=null;
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
mFileTemp=新文件(环境)
.getExternalStorageDirectory(),“IMG\ux”
+“.jpg”);
mImageCaptureUri=Uri.fromFile(mFileTemp);
}否则{
/*
*解决方案如下:
* http://stackoverflow.com/questions
*/10042695/how-to-get-camera-result-as-a-uri-in-data-folder
*/
mFileTemp=新文件(getFilesDir(),“IMG_2;”
+“.jpg”);
mImageCaptureUri=InternalStorageContentProvider.CONTENT\u URI;
}
intent.putExtra(MediaStore.EXTRA_输出,
mImageCaptureUri);
intent.putExtra(“返回数据”,true);
startActivityForResult(意图、请求、编码、拍照);
}捕获(ActivityNotFounde异常){
e、 printStackTrace();
//Log.d(“用户照片”,“无法拍照”,e);
}
}
公共无效graphApi(AccessToken AccessToken){
GraphRequest request=GraphRequest.newUploadPhotoRequest(accessToken,“我/照片”,共享照片,标题,null,new GraphRequest.Callback(){
@凌驾
未完成公共空白(图形响应){
Log.d(“zambo”,“在完成回调时”);
AlertDialog.Builder CompletedDialog=新建AlertDialog.Builder(FBCheckInActivity.this);
completedDialog.setMessage(“感谢您分享您的快乐!!”;
CompletedDialog.setPositiveButton(“确定”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
<button android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="TakePhoto" button=""> 
<imageview android:id="@+id/imageView1" android:layout_gravity="center_horizontal" android:layout_height="wrap_content" android:layout_width="wrap_content"></imageview></button>
    public static final int TAKE_PHOTO = 1;
    public static final int CROP_PHOTO = 2;
    private Button takePhotoBn;
    private ImageView showImage;
    private Uri imageUri; 
    private String filename; 

       @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        takePhotoBn = (Button) findViewById(R.id.button1);
        showImage = (ImageView) findViewById(R.id.imageView1);

        takePhotoBn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                SimpleDateFormat format = new SimpleDateFormat(yyyyMMddHHmmss);
                Date date = new Date(System.currentTimeMillis());
                filename = format.format(date);

                //File outputImage = new File(Environment.getExternalStorageDirectory(),test.jpg);

                File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);  
                File outputImage = new File(path,filename+.jpg);
                try {
                    if(outputImage.exists()) {
                        outputImage.delete();
                    }
                    outputImage.createNewFile();
                } catch(IOException e) {
                    e.printStackTrace();
                }

                imageUri = Uri.fromFile(outputImage);
                Intent intent = new Intent(android.media.action.IMAGE_CAPTURE); 
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
                startActivityForResult(intent,TAKE_PHOTO); 
            }
        });

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode != RESULT_OK) { 
        Toast.makeText(MainActivity.this, ActivityResult resultCode error, Toast.LENGTH_SHORT).show();
        return; 
    }
    switch(requestCode) {
    case TAKE_PHOTO:
        Intent intent = new Intent(com.android.camera.action.CROP); //cut
        intent.setDataAndType(imageUri, image/*);
        intent.putExtra(scale, true);
        intent.putExtra(aspectX, 1);
        intent.putExtra(aspectY, 1);
        intent.putExtra(outputX, 340);
        intent.putExtra(outputY, 340);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        Toast.makeText(MainActivity.this, " ", Toast.LENGTH_SHORT).show();
        //flush
        Intent intentBc = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        intentBc.setData(imageUri);     
        this.sendBroadcast(intentBc);    
        startActivityForResult(intent, CROP_PHOTO); 
        break;
    case CROP_PHOTO:
        try {    
            Bitmap bitmap = BitmapFactory.decodeStream(
                    getContentResolver().openInputStream(imageUri));
            Toast.makeText(MainActivity.this, imageUri.toString(), Toast.LENGTH_SHORT).show();
            showImage.setImageBitmap(bitmap); //show image
        } catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        break;
    default:
        break;
    }
}
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<uses-permission android:name="android.permission.CAMERA"> </uses-permission></uses-permission>
//Check Permission
boolean hasPermission = (ContextCompat.checkSelfPermission(this,
       Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
   ActivityCompat.requestPermissions(this,
           new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
           REQUEST_WRITE_STORAGE);
}



//Upload permission receive listener For Api 23
private static final int REQUEST_WRITE_STORAGE = 112;
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
   super.onRequestPermissionsResult(requestCode, permissions, grantResults);
   switch (requestCode)
   {
       case REQUEST_WRITE_STORAGE: {
           if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
           {
               choseImage();
               //reload my activity with permission granted or use the features what required the permission
           }
           else
           {
               Toast.makeText(this, "Do not allowed to write to your storage. Please consider granting it this permission", Toast.LENGTH_LONG).show();
           }
       }
   }

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