3

アプリでは、ユーザーが自分のアバター画像を自分で選んだものに変更できるようにしています。画像(トリミングされた後)は、アプリのプライベートコンテキストに保存されます。私は自分のやっていることに大きな成功を収めましたが、Nexusでは、メソッドが前進できるようにカメラがデータを返すことはありません。アプリを手動で強制的にシャットダウンする必要があるまで、そのまま待機します。他の4.0ICSデバイスでは動作しますが、Nexusでは動作しません。Nexusを使用すると、ユーザーはギャラリーから選択でき、新しい写真を撮るときだけでなく、問題なく動作します。これを機能させるための秘訣はありますか?

コードの一部は次のとおりです。

もう一度、これは他のデバイスでも問題なく機能していることに注意してください。

final String [] items = new String [] {"Take from camera"、 "Select from gallery"};
ArrayAdapterアダプター=新しいArrayAdapter(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 ) { //take picture
            if (item == 0) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                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();
    mImageView = (ImageView) findViewById(R.id.me_photo);
    File file = new File(context.getCacheDir(), "Avatar"+".png");
    if (file.exists()) {


        //Log.i("CACHE_test", file.getPath());

        Bitmap bitmap = BitmapFactory.decodeFile(file.getPath());

        mImageView.setImageBitmap(bitmap);
    }

    mImageView.setOnClickListener(new View.OnClickListener(){
        public void onClick(View arg0) {
            dialog.show();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) return;
    switch (requestCode) {
        case PICK_FROM_CAMERA:
            mImageCaptureUri= data.getData();
            doCrop();
            break;
        case PICK_FROM_FILE: 
            mImageCaptureUri = data.getData();
            doCrop();
            break;          
        case CROP_FROM_CAMERA:          
            Bundle extras = data.getExtras();
            if (extras != null) {               
                Bitmap photo =(Bitmap) data.getExtras().get("data");
                        //extras.getParcelable("data");
                mImageView.setImageBitmap(photo);
               // FileOutputStream fos = null;
                File file = new File(context.getCacheDir(), "Avatar"+".png");


                    try {
                        file.createNewFile();
                        FileOutputStream fos = new FileOutputStream(file);

                        photo.compress(Bitmap.CompressFormat.PNG, 95, fos);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        Toast.makeText(this, "Sorry, Camera Crashed-Please Report as Crash A.", Toast.LENGTH_LONG).show();
                    } 
            }

            break;
    }
}
4

1 に答える 1

4

これは一般的な問題です。デバイスの一部のモデルでは、異なる追加のキー属性が使用されます。

のようにコマンド
Bitmap photo =(Bitmap) data.getExtras().get("data");

null要素または小さなサムネイル要素を指す可能性があります

この記事を見てください

于 2012-07-12T02:25:02.253 に答える