1

アクティビティの組み込みカメラ アプリケーションを使用して写真を撮ります。問題は、向きが変わってアクティビティが再描画された場合、カメラのインテントから返されたデータを処理できないことです。同じ問題を検索しようとしましたが、もっと混乱しているようです。バンドルに行くのか、それとも OnConfigurationChanged() に行くのか、マニフェスト ファイルのアクティビティ タグに android:configChanges="orientation" を配置しましたが、カメラ インテントを呼び出すこの特定のアクティビティに対して、問題が解決しないようです。誰でも解決策を教えてください。

ここに私のコードがあります:

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== Activity.RESULT_OK){
        Bundle extras = data.getExtras();

        if (extras != null){
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 1;
            options.inPurgeable = true;
            options.inInputShareable = true;
            thumbnail = (Bitmap) data.getExtras().get("data");
            // imgview.setImageBitmap(thumbnail);
            image(thumbnail);

        }else{
            Toast.makeText(CreateProfile.this, "Picture NOt taken", Toast.LENGTH_LONG).show();
        }
        super.onActivityResult(requestCode, resultCode, data);     
    }
}
4

3 に答える 3

2

この属性をファイルactivityのに追加してみてください。Manifest

android:configChanges="keyboardHidden|orientation|screenSize"

ありがとう。

于 2013-02-22T08:46:07.327 に答える
2

まず、コードに問題があります。

あなたは尋ねますif (extras != null){が、それでもデータからビットマップを取得しますthumbnail = (Bitmap) data.getExtras().get("data");この行は

thumbnail = (Bitmap) extras.get("data");

第二に、android:configChanges を使用しないでください。他の多くのことを台無しにするため、ほとんどのアプリでは使用しないでください。

データを取得した後に向きを変更する場合は、saveInstanceState を使用するとうまくいきます。このようなことを試してください。必要なデータを outState バンドル内に配置し、 onRestoreInstance メソッドでそれを取得するだけです

@Override
protected void onSaveInstanceState(Bundle outState) {
 outState.putAll(extras);
 super.onSaveInstanceState(outState);

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {

 super.onRestoreInstanceState(savedInstanceState);
 extras.putAll(savedInstanceState);
}
于 2013-02-22T09:09:47.503 に答える
1

アプリのターゲット SDK が 12 より大きい場合は、12 に変更して、もう一度試してください。

アンドロイド:targetSdkVersion="12"

また、マニフェストのアクティビティ行に android:configChanges="orientation|keyboardHidden" を追加することを忘れないでください

于 2013-02-22T08:57:36.187 に答える