Java Android中的摄像头问题
我正在尝试在我的应用程序中打开camera intent。但我只需要确保图像不会保存在SD卡或内部存储器中。此外,单击图片时,图像应显示在应用程序中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
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" />