TabActivity
次のように(非推奨であることはわかっています)から呼び出されるアクティビティがあります。
intent2 = new Intent().setClass(this, sin2.class);
spec = tabHost.newTabSpec("second").setIndicator("Second").setContent(intent2);
tabHost.addTab(spec);
写真を撮って保存し、サムネイルを設定するアクティビティです。多くのデバイスで完全に動作しますが、Samsung Galaxy PocketまたはGalaxy Wonder (常に Android 2.x) では、Camera Intent を開始すると、元に戻らないことがあります。onActivityResult()
つまり、次のことを意味します。
- 写真を撮ります
- 保存します
- 元には戻らない
onActivityResult()
- それは私が別の写真を撮ることを可能にします
とループしています... 戻ることはありません。 を押すfinish()
と、現在のアクティビティに戻ります。
私はStackOverflowで次のようなことを読んだことがありますgetParent().startActivityForResult(Intent,RequestCode);
が、うまくいきません。
これが私の写真の撮り方です:
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mMakePhotoUri = Uri.fromFile(photofile);
i.putExtra(MediaStore.EXTRA_OUTPUT, mMakePhotoUri);
startActivityForResult(i, num);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK)
{
if (requestCode == 1)
{
.............. things I do.
}
}
}
前もって感謝します!!
私のコード:
onCreate (photo
はビットマップ):
scatta.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
photo = null;
if(foto1.getDrawable()==null)
foto(1);
else if(foto2.getDrawable()==null)
foto(2);
else if(foto3.getDrawable()==null)
foto(3);
else
Toast.makeText(sinistri2.this, "Cancella una foto per poter scattare un'altra", Toast.LENGTH_LONG).show();
}
});
写真 (int) 関数:
@SuppressLint("SimpleDateFormat")
public void hacerfoto(int num){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String n = sdf.format(new Date());
String fotoname = "Immagine-"+ n +".jpg";
File photostorage = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File photostorage2 = new File(photostorage, "im");
photostorage2.mkdirs();
photofile = new File(photostorage2, fotoname);
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mMakePhotoUri = Uri.fromFile(photofile);
i.putExtra(MediaStore.EXTRA_OUTPUT, mMakePhotoUri);
startActivityForResult(i, num);
}
私の onActivityResult 関数:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String filename = sacarfoto();
if (requestCode == 1){
sacarfoto();
if(photo != null){
ruta1 = sacarfoto();
foto1.setBackgroundColor(Color.parseColor("#00000000"));
photo = f.resize(photo, filename);
foto1.setImageBitmap(photo);
cancellare1.setVisibility(View.VISIBLE);
}
else{
cancellare1.setVisibility(View.GONE);
foto1.setBackgroundResource(R.drawable.fondoicona);
Toast.makeText(this, "C'è stato un errore, riprova a scattare la foto", Toast.LENGTH_LONG).show();
}
try {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(ruta1);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
} catch (Exception e) {
}
}
if (requestCode == 2){
sacarfoto();
if(photo != null){
ruta2 = sacarfoto();
photo = f.resize(photo, filename);
foto2.setImageBitmap(photo);
foto2.setBackgroundColor(Color.parseColor("#00000000"));
cancellare2.setVisibility(View.VISIBLE);
}
else{
cancellare2.setVisibility(View.GONE);
foto2.setBackgroundResource(R.drawable.fondoicona);
Toast.makeText(this, "C'è stato un errore, riprova a scattare la foto", Toast.LENGTH_LONG).show();
}
try{
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(ruta2);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
} catch (Exception e) {
}
}
if (requestCode == 3){
sacarfoto();
if(photo != null){
ruta3 = sacarfoto();
photo = f.resize(photo, filename);
foto3.setImageBitmap(photo);
foto3.setBackgroundColor(Color.parseColor("#00000000"));
cancellare3.setVisibility(View.VISIBLE);
}
else{
cancellare3.setVisibility(View.GONE);
foto3.setBackgroundResource(R.drawable.fondoicona);
Toast.makeText(this, "C'è stato un errore, riprova a scattare la foto", Toast.LENGTH_LONG).show();
}
try {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(ruta3);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
} catch (Exception e) {
}
}
if (requestCode == 4) {
try{
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
photo = f.decodeAndResizeFile(new File(selectedImagePath));
} catch(NullPointerException ex){
try {
photo = (Bitmap) data.getExtras().get("data");
}
catch (Exception e){
photo = BitmapFactory.decodeFile(selectedImagePath);
}
}
if(photo != null){
if (foto1.getDrawable()==null){
photo = f.resize(photo,selectedImagePath);
ruta1 = selectedImagePath;
foto1.setImageBitmap(photo);
foto1.setBackgroundColor(Color.parseColor("#00000000"));
cancellare1.setVisibility(View.VISIBLE);
}
else if (foto2.getDrawable()==null){
photo = f.resize(photo,selectedImagePath);
ruta2 = selectedImagePath;
foto2.setImageBitmap(photo);
foto2.setBackgroundColor(Color.parseColor("#00000000"));
cancellare2.setVisibility(View.VISIBLE);
}
else if (foto3.getDrawable()==null){
photo = f.resize(photo,selectedImagePath);
ruta3 = selectedImagePath;
foto3.setImageBitmap(photo);
foto3.setBackgroundColor(Color.parseColor("#00000000"));
cancellare3.setVisibility(View.VISIBLE);
}
else
Toast.makeText(sinistri2.this, "Cancella una foto per poter scattare un'altra", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(this, "Non si è potuto riuscire, riprova scattando una foto o scegliendo una foto dalla gallery.", Toast.LENGTH_LONG).show();
}
}
}
}
関数sacarfoto()
は文字列を返しますが、プロセスを実行するために機能することもありますが、このエラーでは問題ありません。