Android 将照片保存在内部存储器中
我有一个问题,就是我拍了一张照片,我想把它保存在内存中。但我不知道怎么做。谁能提出一些解决办法?谢谢 这是我的代码:Android 将照片保存在内部存储器中,android,camera,save,photo,internal,Android,Camera,Save,Photo,Internal,我有一个问题,就是我拍了一张照片,我想把它保存在内存中。但我不知道怎么做。谁能提出一些解决办法?谢谢 这是我的代码: public class ThreeFragment extends Fragment { private static final String TAG = ThreeFragment.class.getSimpleName(); private static int RESULT_LOAD_IMAGE = 1; private static final int REQUE
public class ThreeFragment extends Fragment {
private static final String TAG = ThreeFragment.class.getSimpleName();
private static int RESULT_LOAD_IMAGE = 1;
private static final int REQUEST_IMAGE_CAPTURE = 1;
View root;
GridView gridView;
String mCurrentPhotoPath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
root = inflater.inflate(R.layout.fragment_three, container, false);
dolist();
return root;
}
public void dolist() {
gridView = (GridView) root.findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(getActivity()));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
openGallery();
break;
case 1:
takePhoto();
break;
case 2:
Log.d(TAG, "333333333333333333333");
break;
default:
break;
}
}
});
}
private void takePhoto() {
Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
}
private String saveToInternalSorage(Bitmap bitmap) {
ContextWrapper cw = new ContextWrapper(getActivity());
File dic = cw.getDir("TEST", Context.MODE_PRIVATE);
File mypath = new File(dic, ".jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return dic.getAbsolutePath();
}
public void openGallery() {
Intent i = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE) {
if (resultCode == Activity.RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
}
}
else if (requestCode == REQUEST_IMAGE_CAPTURE) {
if (resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");
saveToInternalSorage(bitmap);
// setPath(saveToInternalSorage(bitmap));
}
}
}
}
public类ThreeFragment扩展了Fragment{
私有静态最终字符串标记=ThreeFragment.class.getSimpleName();
私有静态int结果\加载\图像=1;
私有静态最终整数请求\图像\捕获=1;
视图根;
GridView;
串电流光路;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
根=充气机。充气(R.layout.fragment_three,容器,假);
dolist();
返回根;
}
公共垃圾箱(){
gridView=(gridView)root.findViewById(R.id.gridView);
setAdapter(新的ImageAdapter(getActivity());
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
开关(位置){
案例0:
openGallery();
打破
案例1:
拍照();
打破
案例2:
日志d(标签“333”);
打破
违约:
打破
}
}
});
}
私人照片{
Intent-cameraIntent=newintent(“android.media.action.IMAGE_-CAPTURE”);
if(cameraIntent.resolveActivity(getActivity().getPackageManager())!=null){
startActivityForResult(摄像帐篷、请求图像捕捉);
}
}
私有字符串saveToInternalSorage(位图){
ContextWrapper cw=新的ContextWrapper(getActivity());
文件dic=cw.getDir(“TEST”,Context.MODE_PRIVATE);
文件mypath=新文件(dic,“.jpg”);
FileOutputStream=null;
试一试{
fos=新文件输出流(mypath);
bitmap.compress(bitmap.CompressFormat.JPEG,100,fos);
fos.close();
}捕获(例外e){
e、 printStackTrace();
}
返回dic.getAbsolutePath();
}
公开展览廊(){
意向i=新意向(意向.行动),
MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i,结果加载图像);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
//super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RESULT\u LOAD\u IMAGE){
if(resultCode==Activity.RESULT\u OK&&null!=数据){
Uri selectedImage=data.getData();
字符串[]filePathColumn={MediaStore.Images.Media.DATA};
Cursor Cursor=getActivity().getContentResolver().query(选择图像,
filePathColumn,null,null,null);
cursor.moveToFirst();
int columnIndex=cursor.getColumnIndex(filePathColumn[0]);
String picturePath=cursor.getString(columnIndex);
cursor.close();
}
}
else if(requestCode==请求\图像\捕获){
if(resultCode==Activity.RESULT\u确定){
Bundle extras=data.getExtras();
位图位图=(位图)附加.get(“数据”);
保存到内部排序(位图);
//设置路径(保存到内部排序(位图));
}
}
}
}
试试这个:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, setImageUri());
cameraIntent.putExtra("return-data", true);
mActPanelFragment.startActivityForResult(cameraIntent, ActivityConstantUtils.CAMERA_REQUEST);
//方法
public Uri setImageUri() {
File file = new File(Environment.getExternalStorageDirectory().getPath(), ActivityConstantUtils.STORED_IMAGE_PATH+"/Images/WOMCamera");
if (!file.exists()) {
file.mkdirs();
}
ActivityConstantUtils.mCurrentPhotoPath = (file.getAbsolutePath() + "/"+"IMG_"+ System.currentTimeMillis() + ".jpg");
Uri imgUri = Uri.fromFile(new File(ActivityConstantUtils.mCurrentPhotoPath));
if (file.canWrite()) {
}
return imgUri;
}
然后为结果编写代码:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ActivityConstantUtils.GALLERY_INTENT_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
String imagePath = getFilePath(data);
}
}
private String getFilePath(Intent data) {
String imagePath;
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imagePath = cursor.getString(columnIndex);
cursor.close();
return imagePath;
}
无论你在活动中得到什么,结果都是缩略图。是否要将原始图像保存到存储器中?是。我只是保存它。但是拍照后,我的应用程序出现错误,无法将结果ResultInfo{who=null,request=196609,result=-1,data=Intent{act=inline data(has extras)}}传递到活动{com.example.qtv.myapplication/com.example.qtv.myapplication.view.MainActivity}:java.lang.NullPointerException:Uri有一种简单的方法:mTempImageFile:它是您要存储图像文件的路径。Uri tempURI=Uri.fromFile(mTempImageFile);意向i=新意向(MediaStore.ACTION\u IMAGE\u CAPTURE);i、 putExtra(MediaStore.EXTRA_输出,tempURI);activity.startActivityForResult(i,选择照相机结果);“ActivityConstantUtils.mccurrentPhotoPath”静态变量您可以将其替换为全局或局部变量。数据类型必须是字符串。我真的不明白。请解释一下。我是诺布。课堂上有很多活动。因为我看到它调用子方法..不要混淆用“String mImagePath”替换完整的变量.谢谢兄弟。我尝试了你的代码,但没有看到任何变化。我在字符串imagePath=getFilePath(数据)下面添加Log.d;获取imagePAth,但不显示任何内容。。它没有得到路径。你能解释我吗?也许我的问题错了。我想像链接“This PC\Nexus 5\Internal storage\DCIM\.abc”一样保存照片。在那里文件夹abc是出口。我的应用程序中的所有照片都保存在那里。sr。。也许你误解了我的理想。我希望保存在相同的路径上,如“This PC\Nexus 5\Internal storage\DCIM\.缩略图”。当我们在PC上打开它时,你可以看到所有的图片。@AceAkatsuki你可以将你的图像存储在任何你想存储的地方,只需给出该路径,例如mImageFile=environment.getExternalStorageDirectory()+File.separator+“DCIM”;它会将图像存储在此位置。如果我理解错误,请解释。File mImageFile=新文件(Environment.getExternalStorageDirectory()+File.separator+“DCIM”);但日志不显示。当我添加“DCIM\\.abc”(abc是floder是exits)时,出现错误:试图在空对象引用上调用虚拟方法“java.lang.String java.io.File.getAbsolutePath()”。你能给我解释一下吗。谢谢。@AceAkatsuki你能分享你的代码吗。最好是github ghisti尝试很多案例,我希望你能告诉我错误。有一个链接github。我的问题三分之一
*Try This :
File mImageFile is path where you want to store you camera image file.
Uri tempURI = Uri.fromFile(mImageFile);
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, tempURI);
activity.startActivityForResult(i, CHOOSE_CAMERA_RESULT);
then in your onActivityResult
@Override
public void onActivityResultRAW(int requestCode, int resultCode, Intent data)
{
super.onActivityResultRAW(requestCode, resultCode, data);
switch(requestCode)
{
case CHOOSE_CAMERA_RESULT:
{
if (resultCode == RESULT_OK)
{
// here you image has been save to the path mImageFile.
Log.d("ImagePath", "Image saved to path : " + mImageFile.getAbsoultePath());
}
}
break;
}
}*