0

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()つまり、次のことを意味します。

  1. 写真を撮ります
  2. 保存します
  3. 元には戻らないonActivityResult()
  4. それは私が別の写真を撮ることを可能にします

とループしています... 戻ることはありません。 を押す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()は文字列を返しますが、プロセスを実行するために機能することもありますが、このエラーでは問題ありません。

4

1 に答える 1