2011-02-04 25 views
1

Droid Xで呼び出されるデフォルトのカメラアクティビティが、DroidとNexus Oneのものと異なって見えます。 DroidとNexus Oneで「OK」を選択すると、アクティビティは終了します.Droid Xには「完了」ボタンがあります(アクティビティの終了ではなくカメラに戻ります)。私がしたい画面は、 "戻る"ボタンを押すことです。ここでAndroid 2.2 SDK - Droid Xカメラアクティビティが正常に終了しない

はドロイドXのためではありません2.2/2.3 Android上で動作するクラスですが、:

package com.android.xxx; 

import java.io.File; 

import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.view.Window; 

public class CameraView extends MenusHolder { 

    protected String _path; 
    protected boolean _taken; 

    protected static final String PHOTO_TAKEN = "photo_taken"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.create_event_view); 
     /* 
     * save to sd 
     */ 
     File imageDirectory = new File(
       Environment.getExternalStorageDirectory() + "/MyPath/"); 
     imageDirectory.mkdirs(); 
     /* 
     * temp image overwrites each time for space 
     */ 
     _path = Environment.getExternalStorageDirectory() 
       + "/MyPath/temporary_image.jpg"; 
     startCameraActivity(); 
    } 

    protected void startCameraActivity() { 
     File file = new File(_path); 
     Uri outputFileUri = Uri.fromFile(file); 

     Intent intent = new Intent(
       android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
     startActivityForResult(intent, 0); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (resultCode) { 
     case 0: 
      setResult(5); 
      finish(); 
      break; 
     case -1: 
      onPhotoTaken(); 
      break; 
     } 
    } 

    protected void onPhotoTaken() { 
     _taken = true; 
     setResult(0); 
     finish(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState.putBoolean(CameraView.PHOTO_TAKEN, _taken); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     if (savedInstanceState.getBoolean(CameraView.PHOTO_TAKEN)) { 
      onPhotoTaken(); 
     } 
    } 

} 

答えて

0

おい...それだけでバグです。私は同じ問題を抱えていたので、それを回避する方法はありません。時にはうまくいくことがあり、ときにはうまくいきません。私はモトローラの人に助けを頼んだ。彼らは、それらのAndroidイメージをサポートしていないと言った。

1

私はこれを本当に醜い解決策で解決しました。私はsdcard(ここから取得:http://www.sgoliver.net/blog/?p=2035)からファイルを読み書きする2つの関数をコーディングしました。

private boolean readFile() { 
    try 
    { 
     File sd_path = Environment.getExternalStorageDirectory(); 

     File f = new File(sd_path.getAbsolutePath(), "lock_camera_oncreate"); 

     BufferedReader fin = 
      new BufferedReader(
       new InputStreamReader(
        new FileInputStream(f))); 

     String text = fin.readLine(); 
     fin.close(); 
     Log.e("Files", "Reading file"); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Log.e("Files", "Error reading file from SD Card"); 
     return false; 
    } 
} 

private void createFile() { 
    try 
    { 
     File sd_path = Environment.getExternalStorageDirectory(); 

     File f = new File(sd_path.getAbsolutePath(), "lock_camera_oncreate"); 

     OutputStreamWriter fout = 
      new OutputStreamWriter(
       new FileOutputStream(f)); 

     fout.write("Semaphore test."); 
     fout.close(); 
     Log.e("Files", "File writed"); 
    } 
    catch (Exception ex) 
    { 
     Log.e("Files", "Error reading file from SD Card"); 
    } 

} 

はその後、のonCreate機能では、私はこれます

public void onCreate(Bundle savedInstanceState) { 
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    super.onCreate(savedInstanceState); 

    if(readFile() == true) 
    { 
     File sd_path = Environment.getExternalStorageDirectory(); 
     File f = new File(sd_path.getAbsolutePath(), "lock_camera_oncreate"); 
     f.delete(); 

     Intent intent = this.getIntent(); 
     this.setResult(RESULT_OK, intent); 
     return; 
    } 

    createFile(); 

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCurrentImagePath))); 
    startActivityForResult(cameraIntent, TAKE_PHOTO_CODE); 
} 

setRequestedOrientationコールを使用して、ポートレートモードでアプリを使用している問題を解決するが、カメラが起動されたとき、あなたが携帯電話を置きます写真を撮影します。

次に、醜いreadFileのことは、lock_camera_oncreateファイルが存在するかどうかをチェックし、真の場合は です。それで追加のonCreate呼び出しが行われたので、このアクティビティからファイルとRETURNを削除してください。

アクティビティが進む場合は、ファイルが作成されておらず、実行中のカメラアクティビティは1つのみであることを意味します。

私が役に立ったら醜いですが、私にとってはうまくいったと思っています:D

関連する問題