編集 まず第一に、私は Android に不慣れで、ギャラリー機能とそのメソッドの操作に関してはあまり把握していないので、少し辛抱して、私が間違っていることを教えてください。
シナリオグリッド ビュー (一種のファイル エクスプローラー) 内でアプリの写真を設定しています。インテント(これは Intent.ACTION_PICK ではないことに注意してください)を使用してグリッドビューのフォルダーをクリックして画像を参照して開くと、あるアクティビティから別のアクティビティに移動し、クリックされたアイテムのパスを putString() メソッドに渡すだけです。この時点までは問題なく動作しますが、問題は、Uri、ビットマップなどに関する情報を取得する方法がわからないことです.
このシナリオで使用する必要がある戦略を教えてください。ここ 2 日間、SO で多くの質問を見てきましたが、そのほとんどはギャラリー アクション ピック インテントを使用し、onActivityResult() で結果を取得し、getData() メソッドを使用して選択した画像に関する情報を取得しています。カメラを開いて onActivityResult() メソッドを使用して情報を取得したときにも成功しましたが、これは別のシナリオです (少なくとも初心者の私にとっては) それを理解する方法の正しい方法を教えてください. 私が持っているのは、新しいアクティビティで開かれた特定のイメージのパスだけです。
以下はアクティビティ コードです。Gridview アクティビティから画像を開くために使用しました。
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.scanlibrary.ScanConstants;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import static com.itextpdf.text.Image.getInstance;
/**
* Created by ADMIN on 6/23/2016.
*/
public class ImageOpenedActivity extends Activity {
ImageView imageView;
String received;
private Button pdfConverter, openPDFConverter;
String path;
String outputPath;
File openfile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if (extras == null) {
received = null;
}
else {
received = extras.getString("Image");
}
}
else {
received = (String) savedInstanceState.getSerializable("Image");
}
setContentView(R.layout.imageopened);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local time in the system
pdfConverter = (Button) findViewById(R.id.PDF);
openPDFConverter = (Button) findViewById(R.id.openPDF);
imageView = (ImageView) findViewById(R.id.imageView);
imageView.setImageURI(Uri.parse(received));
outputPath = ScanConstants.IMAGE_PATH + File.separator + "PDF" + dateTime + ".pdf";
Bitmap viewBitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888);//i is imageview whch u want to convert in bitmap
Canvas canvas = new Canvas(viewBitmap);
imageView.draw(canvas);
Uri tempUri = getImageUri(getApplicationContext(), viewBitmap);
// CALL THIS METHOD TO GET THE ACTUAL PATH
File finalFile = new File(getRealPathFromURI(tempUri));
path = String.valueOf(finalFile);
//openPDFConverter.setOnClickListener(new View.OnClickListener() {
//@Override
//public void onClick(View v) {
// openfile = new File(outputPath);
// Intent target = new Intent(Intent.ACTION_VIEW);
// target.setDataAndType(Uri.fromFile(openfile), "application/pdf");
// target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
//
// Intent intent = Intent.createChooser(target, "Open File");
// try {
// startActivity(intent);
// } catch (ActivityNotFoundException e) {
// Log.e("Errorrrr ::::", outputPath);
// }
// }
// });
// // PDF Converter onclick method
// pdfConverter.setOnClickListener(new View.OnClickListener() {
//@Override
//public void onClick(View view) {
// // Will run the conversion in another thread to avoid the UI to be frozen
// Thread t = new Thread() {
//public void run() {
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local time in the system
//
// // Input file
// //inputPath = Environment.getExternalStorageDirectory() + File.separator + "test" + dateTime + ".jpg";
//
// // Output file
// // outputPath = Environment.getExternalStorageDirectory() + File.separator + "PDF"+dateTime+".pdf";
// outputPath = ScanConstants.IMAGE_PATH + File.separator + "PDF" + dateTime + ".pdf";
//
// Log.e("Passed path is:::", path);
//// Run conversion
//final boolean result = ImageOpenedActivity.this.convertToPdf(path, outputPath);
//
// // Notify the UI
// runOnUiThread(new Runnable() {
//public void run() {
// if (result) {
// openPDFConverter.setVisibility(Button.VISIBLE);
// Toast.makeText(ImageOpenedActivity.this, "The JPG was successfully converted to PDF.", Toast.LENGTH_SHORT).show();
// }
// else
// Toast.makeText(ImageOpenedActivity.this, "An error occured while converting the JPG to PDF.", Toast.LENGTH_SHORT).show();
// }
// });
// }
// };
// t.start();
// }
// });
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
Log.e("Bitmap received ::::", String.valueOf(inImage));
//inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
Log.e("getImageURI path:", String.valueOf(path));
return Uri.parse(path);
}
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
Log.e("getRealPathFromURI:::", String.valueOf(uri));
Log.e("URI received", String.valueOf(uri));
return cursor.getString(idx);
}
public boolean convertToPdf(String jpgFilePath, String outputPdfPath) {
try {
// Check if Jpg file exists or not
File inputFile = new File(jpgFilePath);
if (!inputFile.exists()) {
Log.e("Input File::", String.valueOf(inputFile));
throw new Exception("File '" + jpgFilePath + "' doesn't exist.");
}
// Create output file if needed
File outputFile = new File(outputPdfPath);
if (!outputFile.exists()) {
outputFile.createNewFile();
Log.e("Output File::", String.valueOf(outputFile));
}
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(outputFile));
document.open();
com.itextpdf.text.Image image = getInstance(jpgFilePath);
image.setAbsolutePosition(0, 0);
image.scaleAbsolute((float) 2549 * (float) .24, (float) 3304 * (float) .24);
image.scaleToFit((float) 2549 * (float) .24, (float) 3304 * (float) .24);
document.add(image);
Log.e("After document added::", String.valueOf(image));
document.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}