2017-09-10 58 views
1

我目前正在開發Android應用程序與分SDK是19,並試圖以支持一路攀升至26這周我已經添加了攝像頭功能,活動和我」我覺得調試這個很荒唐。API 22相機通過意向問題

基本上,用戶點擊相機圖標,它通過一個意圖開始Android相機,用戶拍攝照片,它被保存,然後添加到他們啓動相機的意圖之前所查看的滑塊畫廊。

所以,我終於得到它的API 19,21,23,24,25和26的工作......這是給我一個問題,唯一的API爲22,我真的想不通這是爲什麼。當我點擊相機圖標時,它會啓動意圖,相機加載到白色屏幕,並且應用程序崩潰。踢球者是這樣的,我只是試了一下,它的工作,這兩次,現在應用程序成功地拍了照片,保存它,並沒有崩潰。

它的工作後,我又嘗試過了,我得到這個:

09-09 17:19:22.381 6163-6163/com.android.camera E /攝像頭:100錯誤 09-09 17:19:22.381 6163-6163/com.android.camera E/CameraErrorCallback:GOT>相機錯誤回調。誤差= 100 09-09 17:19:22.381 6163-6163/com.android.camera E/AndroidRuntime:致命>例外:主 工藝:> com.android.camera,PID:6163

的java .lang.RuntimeException:媒體服務器死亡。 (Camera.java:1148) at> android.os.Handler.dispatchMessage(Handler .java:102) at> android.os.Looper.loop(Looper.java:135) at> android.app.ActivityThread.main(ActivityThread.java:5254) at> java.lang.reflect.Method。 invoke(Native Method) at> java.lang.reflect.Method.invoke(Method.java:372) at> com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) at> com.android.internal.os.ZygoteInit.main(ZY goteInit.java:698)

,並試圖有點後,我接到再次,不同的錯誤以後。

09-09 17:32:22.185 1530年至1611年/ system_process E/AudioService:媒體服務器死亡。 09-09 17:32:22.191 4072-4072/com.android.camera E/AndroidRuntime:致命>例外:主 工藝:> com.android.camera,PID:4072

java.lang中。 RuntimeException:getParameters失敗(空參數) at> android.hardware.Camera.native_getParameters(Native Method) at> android.hardware.Camera.getParameters(Camera.java:1888) at> com.android.camera.Camera。 initializeZoom(Camera.java:489) 在> com.android.camera.Camera.initializeFirstTime(Camera.java:392) 在> com.android.camera.Camera.access $ 600 (Camera.java:87) 在> com.android.camera.Camera $ MainHandler.handleMessage(Camera.java:290) 在> android.os.Handler。dispatchMessage(Handler.java:102) at> android.os.Looper.loop(Looper.java:135) at> android.app.ActivityThread.main(ActivityThread.java:5254) at> java.lang.reflect .Method.invoke(Native Method) at> java.lang.reflect.Method.invoke(Method.java:372) at> com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

這裏是我的代碼周圍循環調用相機功能/ ACTI VITY:

設置相機圖標的onclick監聽器:

public boolean onCreateOptionsMenu(Menu menu) { 

     item.getActionView().setOnClickListener(new View.OnClickListener() > 
      @Override 
      public void onClick(View v) { 
       startActivityForResult(CameraUtility.dispatchTakePictureIntent(getApplicationContext(), mushroomFolder), 1); 
       return; 
      } 
     }); 
    return super.onCreateOptionsMenu(menu); 
} 

的對結果的活動只是增加了最後拍攝的照片的畫廊,而不是甚至達到了所以我不會理會它包括。

而且繼承人我CameraUtility代碼:

class CameraUtility extends AppCompatActivity { 
private static String CURRENT_PHOTO_PATH; 
public static String PHOTO_DIRECTORY; 

public static void setPhotoDirectory(Context c) { 
    PHOTO_DIRECTORY = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/"; 
} 

public static Intent dispatchTakePictureIntent(Context c, String name) { 
    String timeStamp = new SimpleDateFormat("dd-MM-yyyy_HHmmss").format(new Date()); 
    String path = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/" + name + "/" + name + timeStamp + ".jpg"; 
    File file = new File(path); 
    Uri outputFileUri; 
    if (Build.VERSION.SDK_INT >= 23)   
     outputFileUri=FileProvider.getUriForFile(c, 
     "com.tracker.mushroom.fileprovider", file); 
    else 
     outputFileUri = Uri.fromFile(file); 
    CURRENT_PHOTO_PATH = file.getPath(); 
    Intent intent = new Intent(
      MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    return intent; 
} 

public static String getCurrentPhotoPath() { 
    return CURRENT_PHOTO_PATH; 
} 

public static File[] getImageFiles(Context c, String mushroomFolder) throws IOException { 
    String filePath = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/" + mushroomFolder; 
    File file = new File(filePath); 
    file.mkdirs(); 
    file.setReadable(true); 
    file.setWritable(true); 
    return file.listFiles(); 
    } 
} 

所以,我真的不知道如果我的代碼的問題,或者如果它的模擬器或如果別的東西我甚至不知道關於,因爲如果每個其他API都在工作,我不能幫助,但只是抓我的頭。我知道getParameters()誤差是與相機有關的類,但我甚至不使用它,所以我不知道爲什麼它甚至觸發錯誤。所有和任何輸入是受歡迎的,非常感謝。

+0

這不是一個API相關的問題,這是你打電話到崩潰的攝像頭應用程序。你在API 22模擬器上試試這個嗎? – ianhanniballake

+0

如果你有一個真實的設備工作,它可能僅僅是一個特定於設備的問題。我遇到了不少設備,這些設備都有奇怪的相機問題。此外,它也可能是該設備上的默認相機應用程序的問題。所有者可以設置任何支持相機意圖處理它們的應用程序,而不是系統相機應用程序。甚至系統相機應用程序可能是在一個拋光不足的設備上的越野車。 –

+0

@ianhanniballake是,API 22模擬器,不同的手機。您是否試圖說他們是模擬器上提供的默認相機應用程序的問題?因爲這會很有意義。 – Philtron

回答

1

好吧,我做了一些進一步的測試,我想我在哪裏,我要責怪這個仿真器/ Android的工作室點。我跑了3場firebase robo測試,全部在api 22和不同的手機型號上。

其中每一個不斷打開和關閉相機的活動就好了,不幸的是測試從來沒有真正拍過照片,但是在這之前發生了故障。

如果我有機會測試了這一點,我有22 API在物理設備上的自我,它的作品,我肯定知道它的仿真器/ Android的問題。在這一點上,我甚至不覺得值得投入時間去嘗試和調試,特別是在機器人測試之後。希望有人認爲這有用,並節省一些時間後追逐一些變異的幽靈錯誤,哈哈。

編輯: 想添加爲最後的筆記..我下載了api 22 x86,安裝它,並做了一個新的模擬器。沒有更多的問題。我使用的是api 22 x86_64,出於某種原因,它只是不喜歡在該版本上工作。給那些評論的人歡呼,你們很棒。