アプリケーションでカメラから画像を取得するクラスを作成しました。 このクラスはカメラで写真を撮影し、一意の名前のフォルダに保存します。 しかし、私がonActivityResult
の方法で画像のパスを取得したいときは、いつもdata
のヌルヌル!私はカメラを使用した活動でonActivityResult()
方法を設定しカメラから画像を取得してonActivityResultにnullを取得する
public class Camera{
private Activity activity;
private SystemTools systemTools;
public Camera(Context context) {
this.activity = (Activity) context;
systemTools = new SystemTools();
}
/**
* This Method will take a picture with camera for us
*/
public void takePicture() {
boolean cameraAvailable = systemTools.device_isHardwareFeatureAvailable(activity, PackageManager.FEATURE_CAMERA);
if (cameraAvailable &&
systemTools.system_isIntentAvailable(activity, MediaStore.ACTION_IMAGE_CAPTURE)) {
Intent takePicIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//We prepare the intent to store the taken picture
try {
File outputDir = systemTools.storage_getExternalPublicFolder("ReportsAttachments", true);
File outFile = systemTools.storage_createUniqueFileName("cameraPic", ".jpg", outputDir);
takePicIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outFile));
} catch (Exception e) {
Toast.makeText(activity, "در دریافت تصویر اشکالی رخ داده است ، لطفا دوباره تلاش کنید.", Toast.LENGTH_SHORT).show();
}
activity.startActivityForResult(takePicIntent, App.REQUEST_IMAGE_CAPTURE);
} else {
if (cameraAvailable) {
Toast.makeText(activity, "برنامه ی دوربین دستگاه خراب است.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(activity, "دسترسی به دوربین سیستم امکان پذیر نمی باشد.", Toast.LENGTH_SHORT).show();
}
}
}
}
アン:
これは私のクラスのカメラです。このように:私はonActivityResult
の「データ」は、すべての時間ヌルであるので、私はcant't画像のパスを取得したいとき
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == App.REQUEST_IMAGE_CAPTURE) {
if (resultCode == Activity.RESULT_OK && data != null) {
Log.i("ATTACH", "In Result");
Bitmap bmp = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri selectedImage = getImageUri(this, bmp);
String realPath = getRealPathFromURI(selectedImage);
selectedImage = Uri.parse(realPath);
presenter.onNewAttachmentRequest(selectedImage.getPath());
}
}
} catch (Exception e) {
Log.i("ATTACH", e + " Something went wrong");
}
}
これが正常に動作してpictreをtaked SD_Cardにavaliableですけど! このコードの問題はどこですか?
ありがとうございます。
お使いのデバイスならば、あなたは、ストレージすなわち読み書き込み権限の権限を持っていることを確認してくださいmarshmellow以上です。ランタイム権限を追加してください。 –
私はすべての権限を持っています。それは動作しません。 – Ehsan