2012-01-09 11 views
0

私はイメージクロッピング機能とその実行中の罰金を開発しました。 From here 今、私はトリミング時にキャンセルイベントを処理する必要があります。2つのボタンが最初にsavecancelクロッピングページにあります。私はクリックリスナーを見つけようとしましたが、失敗しました。 Intent intent = new Intent("com.android.camera.action.CROP");機能を使用するので、私はそれを処理することができますので、私は自分のカスタムコードを発射することができますので、私はlistnerを見つけられません。ここ 作物のキャンセルイベントを検出する

は私のコードです:MainActivity

あなたのonActivityResult機能で
package net.londatiga.android; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.ActivityNotFoundException; 
import android.content.ComponentName; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.ResolveInfo; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    private Uri mImageCaptureUri; 
    private ImageView mImageView; 

    private static final int PICK_FROM_CAMERA = 1; 
    private static final int CROP_FROM_CAMERA = 2; 
    private static final int PICK_FROM_FILE = 3; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     final String [] items   = new String [] {"Take from camera", "Select from gallery"};     
     ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.select_dialog_item,items); 
     AlertDialog.Builder builder  = new AlertDialog.Builder(this); 

     builder.setTitle("Select Image"); 
     builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { //pick from camera 
       if (item == 0) { 
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

        mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), 
             "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg")); 

        intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri); 

        try { 
         intent.putExtra("return-data", true); 

         startActivityForResult(intent, PICK_FROM_CAMERA); 
        } catch (ActivityNotFoundException e) { 
         e.printStackTrace(); 
        } 
       } else { //pick from file 
        Intent intent = new Intent(); 

        intent.setType("image/*"); 
        intent.setAction(Intent.ACTION_GET_CONTENT); 

        startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE); 
       } 
      } 
     }); 

     final AlertDialog dialog = builder.create(); 

     Button button = (Button) findViewById(R.id.btn_crop); 
     mImageView  = (ImageView) findViewById(R.id.iv_photo); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialog.show(); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != RESULT_OK) return; 

     switch (requestCode) { 
      case PICK_FROM_CAMERA: 
       doCrop(); 

       break; 

      case PICK_FROM_FILE: 
       mImageCaptureUri = data.getData(); 

       doCrop(); 

       break;   

      case CROP_FROM_CAMERA:   
       Bundle extras = data.getExtras(); 
       Toast.makeText(MainActivity.this, "new ppappap", Toast.LENGTH_LONG).show(); 
       if (extras != null) {    
        Bitmap photo = extras.getParcelable("data"); 
        System.out.println("photo is ::: "+photo); 
        mImageView.setImageBitmap(photo); 

        try 
        { 
        ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
        photo.compress(Bitmap.CompressFormat.PNG, 100, stream); 
        byte[] byteArray = stream.toByteArray(); 
        File f = new File(Environment.getExternalStorageDirectory() 
          + File.separator + "audiometer/test.jpg"); 
        f.createNewFile(); 
        //write the bytes in file 
        FileOutputStream fo = new FileOutputStream(f); 
        fo.write(byteArray); 
        }catch (Exception e) { 
         // TODO: handle exception 
        } 
       } 

       File f = new File(mImageCaptureUri.getPath());    

       if (f.exists()) f.delete(); 

       break; 

      default: 
       Toast.makeText(MainActivity.this, "default", Toast.LENGTH_LONG).show(); 
       break; 

     } 
    } 

    private void doCrop() { 
     final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>(); 

     Intent intent = new Intent("com.android.camera.action.CROP"); 
     intent.setType("image/*"); 

     List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0); 

     int size = list.size(); 

     if (size == 0) {    
      Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show(); 

      return; 
     } else { 
      intent.setData(mImageCaptureUri); 

      intent.putExtra("outputX", 200); 
      intent.putExtra("outputY", 200); 
      intent.putExtra("aspectX", 1); 
      intent.putExtra("aspectY", 1); 
      intent.putExtra("scale", true); 
      intent.putExtra("return-data", true); 

      if (size == 1) { 
       Intent i  = new Intent(intent); 
       ResolveInfo res = list.get(0); 
       //Toast.makeText(this, "new", Toast.LENGTH_SHORT).show(); 
       i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 

       startActivityForResult(i, CROP_FROM_CAMERA); 
      } else { 
       for (ResolveInfo res : list) { 
        final CropOption co = new CropOption(); 

        co.title = getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo); 
        co.icon  = getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo); 
        co.appIntent= new Intent(intent); 

        co.appIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 

        cropOptions.add(co); 
       } 

       CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions); 

       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setTitle("Choose Crop App"); 
       builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int item) { 
         Toast.makeText(MainActivity.this, "new ppappap", Toast.LENGTH_LONG).show(); 
         startActivityForResult(cropOptions.get(item).appIntent, CROP_FROM_CAMERA); 
        } 
       }); 

       builder.setOnCancelListener(new DialogInterface.OnCancelListener() { 
        @Override 
        public void onCancel(DialogInterface dialog) { 

         if (mImageCaptureUri != null) { 
          getContentResolver().delete(mImageCaptureUri, null, null); 
          mImageCaptureUri = null; 
          Toast.makeText(MainActivity.this, "inner code", Toast.LENGTH_SHORT).show(); 
         } 
         Toast.makeText(MainActivity.this, "outer code", Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       AlertDialog alert = builder.create(); 

       alert.show(); 
      } 
     } 
    } 
} 

答えて

5

if (requestCode == CROP_FROM_CAMERA && resultcode == RESULT_CANCELED { 
    // crop was cancelled 
} 
+0

最終的に私は 'でそれを行っている場合(!のresultCode = RESULT_OK) 'しかし、この解決策は私にはいい希望のキャップです+1 –

+0

resultCodeをチェックすることに注意してください。ユーザーがキャンセルする場合がありますd "PICK_FROM_CAMERA"または "PICK_FROM_FILE"アクションも同様です。 – danh32

+0

これは問題を起こすので、私は何をしますか? –

関連する問題