我無法將圖像保存到設備上的內存中。我查看了其他主題並實施了這些主題,但沒有任何效果可以幫助我。如果任何人都可以指出我正確的方向,將不勝感激。我也無法將圖像保存到SD卡,因爲我的平板電腦沒有。這裏是我的代碼保存到內存android
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity
{
// Request codes for Activities
private static final int CAPTURE_IMAGE_REQUEST = 100;
private static final int MEDIA_TYPE_IMAGE = 1;
private static final int LINK_TO_DROPBOX = 150;
// Directory name to store captured images
private static String IMAGE_DIRECTORY_NAME = "Android to Dropbox";
// Uri to store images
private Uri fileUri;
private ImageView imagePreview; // To preview image
private Button captureImage; // To launch camera intent
private Button linkDropbox; // Link users Dropbox account
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagePreview = (ImageView)findViewById(R.id.imagePrview);
captureImage = (Button)findViewById(R.id.imageCapture);
linkDropbox = (Button)findViewById(R.id.linkToDropbox);
// Go to method to start camera intent to capture image
captureImage.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
captureImage();
}
});
// Check if user is connected to their Dropbox account
linkDropbox.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
linkToDropbox();
}
});
}// End onCreate
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putParcelable("file_uri", fileUri);
}// End onSavedInstanceState
// Restore fileUri
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
fileUri = savedInstanceState.getParcelable("file_uri");
}// End onRestoreInstanceState
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}// End onCreateOptionsMenu
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == CAPTURE_IMAGE_REQUEST)
{
if(resultCode == RESULT_OK) // Successfully captured image
previewCapturedImage();
else if(resultCode == RESULT_CANCELED) // User cancelled image capture
Toast.makeText(getApplicationContext(), "User cancelled image capture", Toast.LENGTH_SHORT).show();
else // Failed to capture image
Toast.makeText(getApplicationContext(), "Failed to capture image", Toast.LENGTH_SHORT).show();
}
}// End onActivityResult
// Method to launch camera within app
private void captureImage()
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_REQUEST);
}// End captureImage
// Check if user has linked to their Dropbox account
private void linkToDropbox()
{
}// End linkToDropbox
// Preview captured image
private void previewCapturedImage()
{
try
{
imagePreview.setVisibility(View.VISIBLE); // Show ImageView
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
final Bitmap image = BitmapFactory.decodeFile(fileUri.getPath(), options);
imagePreview.setImageBitmap(image);
saveToInternalMemory(image); // TRY TO SAVE IMAGE IN INTERNAL MEMORY
}
catch(NullPointerException e)
{
e.printStackTrace();
}
}// End previewCapturedImage
// Method to save image to inernal memory
public void saveToInternalMemory(Bitmap image)
{
boolean ableToSave = true;
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if(pictureFile == null)
{
Toast.makeText(getApplicationContext(), "Failed to save image", Toast.LENGTH_SHORT).show();
ableToSave = false;
}
if(ableToSave)
{
try
{
FileOutputStream stream = new FileOutputStream(pictureFile);
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.close();
}
catch(FileNotFoundException e)
{
Toast.makeText(getApplicationContext(), "File not found", Toast.LENGTH_SHORT).show();
}
catch(IOException e)
{
Toast.makeText(getApplicationContext(), "Error accessing file", Toast.LENGTH_SHORT).show();
}
}
}// End saveToInternalMemory
// Create file uri to store image
public Uri getOutputMediaFileUri(int type)
{
return Uri.fromFile(getOutputMediaFile(type));
}// End getOutputMediaFileUri
// Return image
private static File getOutputMediaFile(int type)
{
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), IMAGE_DIRECTORY_NAME);
File mediaFile;
if(!mediaStorageDir.exists())
{
if(!mediaStorageDir.mkdirs())
{
Log.d(IMAGE_DIRECTORY_NAME, "Failed to create " + IMAGE_DIRECTORY_NAME + " directory");
mediaFile = null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); // Image name
if(type == MEDIA_TYPE_IMAGE)
{
mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
}
else
mediaFile = null;
return mediaFile;
}// End getOutputMediaFile
}// End MainActivity
編輯:看起來像這段代碼是爲我工作。照片不會顯示在我的設備上,除非我重新啓動它,然後它們會出現在我的照片應用程序中。
您需要指定您正面臨的問題。此外,在這裏複製所有代碼只會讓人們難以閱讀和理解。請僅包含您遇到問題的部分。 –
您是否找到任何解決方案?我陷入了同樣的問題。我可以寫圖像到外部存儲位不是內部:( –