私は、カメラから画像をクリックするオプションをユーザに与えてから、この画像をバイト配列とデータベースに保存します。しかし、私のコードは以下のサムスンギャラクシーS3上で動作していないようコードです:カメラのための活動方法でカメラの意図がSamsung Galaxy S3と連携していません
if (i == 0) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
}
:意図を呼び出す
カメラ
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1337 && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
if (extras != null) {
BitmapFactory.Options options = new BitmapFactory.Options();
thumbnail = (Bitmap) extras.get("data");
image(thumbnail);
} else {
Toast.makeText(CreateProfile.this, "Picture NOt taken", Toast.LENGTH_LONG).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
マイ画像(ビットマップサムネイル)機能:
public void image(Bitmap thumbnail) {
Bitmap photo = thumbnail;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, bos);
b = bos.toByteArray();
ImageView imageview = (ImageView)findViewById(R.id.imageView1);
Bitmap bt = Bitmap.createScaledBitmap(photo, 100, 80, false);
imageview.setImageBitmap(bt);
}
これはサムスンS3では動作しませんでしたが、私はcそれは他のどのデバイスでも動作しません。
カメラ意図:結果のため
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
アクティビティ:
startActivityForResult(intent, CAMERA_IMAGE_CAPTURE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
// Describe the columns you'd like to have returned. Selecting from the Thumbnails location gives you both the Thumbnail Image ID, as well as the original image ID
String[] projection = {
MediaStore.Images.Thumbnails._ID, // The columns we want
MediaStore.Images.Thumbnails.IMAGE_ID,
MediaStore.Images.Thumbnails.KIND,
MediaStore.Images.Thumbnails.DATA};
String selection = MediaStore.Images.Thumbnails.KIND + "=" + // Select only mini's
MediaStore.Images.Thumbnails.MINI_KIND;
String sort = MediaStore.Images.Thumbnails._ID + " DESC";
//At the moment, this is a bit of a hack, as I'm returning ALL images, and just taking the latest one. There is a better way to narrow this down I think with a WHERE clause which is currently the selection variable
Cursor myCursor = this.managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, selection, null, sort);
long imageId = 0l;
long thumbnailImageId = 0l;
String thumbnailPath = "";
try{
myCursor.moveToFirst();
imageId = myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.IMAGE_ID));
thumbnailImageId = myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID));
thumbnailPath = myCursor.getString(myCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
}
finally{myCursor.close();}
//Create new Cursor to obtain the file Path for the large image
String[] largeFileProjection = {
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA
};
String largeFileSort = MediaStore.Images.ImageColumns._ID + " DESC";
myCursor = this.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, largeFileProjection, null, null, largeFileSort);
String largeImagePath = "";
try{
myCursor.moveToFirst();
//This will actually give yo uthe file path location of the image.
largeImagePath = myCursor.getString(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
}
finally{myCursor.close();}
// These are the two URI's you'll be interested in. They give you a handle to the actual images
Uri uriLargeImage = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(imageId));
Uri uriThumbnailImage = Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, String.valueOf(thumbnailImageId));
// I've left out the remaining code, as all I do is assign the URI's to my own objects anyways...
// Toast.makeText(this, ""+largeImagePath, Toast.LENGTH_LONG).show();
// Toast.makeText(this, ""+uriLargeImage, Toast.LENGTH_LONG).show();
// Toast.makeText(this, ""+uriThumbnailImage, Toast.LENGTH_LONG).show();
if (largeImagePath != null) {
// Toast.makeText(this, "" + largeImagePath, Toast.LENGTH_LONG).show();
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = OG;
// thumbnail = (BitmapFactory.decodeFile(picturePath));
thumbnail = BitmapFactory.decodeFile((largeImagePath), opts);
System.gc();
if (thumbnail != null) {
Toast.makeText(this, "Success", Toast.LENGTH_LONG).show();
}
image(thumbnail);
}
if (uriLargeImage != null) {
Toast.makeText(this, "" + uriLargeImage, Toast.LENGTH_LONG).show();
}
if (uriThumbnailImage != null) {
Toast.makeText(this, "" + uriThumbnailImage, Toast.LENGTH_LONG).show();
}
}
これは私の画像であり、()関数:
public void image(Bitmap thumbnail) {
b = null;
Bitmap photo = thumbnail;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, bos);
b = bos.toByteArray();
if (b != null) {
Toast.makeText(this, "Success Yeah" + b, Toast.LENGTH_LONG).show();
}
}
すべての3つの1)uriLargeImage 2など中) largeImagePath 3)uriThumbnailImageがパスまたはURIを返します。作成したビットマップをImageViewに設定できません。しかし、これはサムスンS3の場合のみです。上記の編集済みのコードを他のデバイスで実行すると、プログラムがクラッシュします。マニフェスト私はチュートリアルに基づいて
android:configChanges="keyboardHidden|orientation"
を使用していたで
:http://kevinpotgieter.wordpress.com/2011/03/30/null-intent-passed-back-on-samsung-galaxy-tab/
私は風景モードで写真を撮る場合は、すべてが正常に動作します!私は困惑している! (サムスンS3で)
この特定のデバイスで同じ問題が発生しました。私は多くの試行錯誤の後にこの問題を解決しました。あなたは[ここ](http://stackoverflow.com/questions/14495304/camera-force-closing-issue-in-samsung-galaxy-s3-version-4-1-1/14640678)からこの問題についてより良いアイデアを得るかもしれません。 #14640678) –
上記のリファレンスは同じメイトで、同じチュートリアルのリファレンスを使用しましたが、すべて問題なく動作するようですが、唯一の問題はマニフェスト宣言では発生しないデータをどこかで失うことです。 – Skynet
あなたのプロジェクトをリンクしてもよろしいですか?私はいくつかのものを試しても構いません。 –