2017-06-14 54 views
-1

我正在編寫一個應用程序,並且由於靈活性,我決定在其設計中使用片段,但是當我運行該應用程序時,我得到了nullobjectreference。問題是片段不等待用戶授予權限,因爲它是異步運行的,所以當它創建攝像頭實例時,它會由於缺少權限而變爲空,即使我先檢查它們。下面是onCreateView代碼:請求在片段中使用相機權限

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    if(checkCameraHardware(this.getActivity())){ 
     checkPermissions(); 
    }else { 
     try { 
      this.finalize(); 
     } catch (Throwable throwable) { 
      throwable.printStackTrace(); 
     } 
    } 

    LinearLayout buttonLayout = (LinearLayout)setButton(); 


    mFrameLayout = new FrameLayout(this.getActivity()); 
    FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
    frameParams.gravity = Gravity.BOTTOM; 
    mFrameLayout.setLayoutParams(frameParams); 

    mFrameLayout.addView(mPreview); 
    mFrameLayout.addView(buttonLayout); 


    return mFrameLayout; 
} 

,當我創建攝像機實例:

private void cameraCreator(){ 
    mCamera = getCameraInstance(); 
    mCamera.setDisplayOrientation(90); 

    mPreview = new CameraPreview(this.getActivity(), mCamera); 

} 

我知道,我不能掛起線程只是許可的要求,但我能做些什麼?

+0

不啓動'的onCreate()線程'但是'onRequestPermissionsResult' – Shark

+0

你FragmentActivity調用該片段是什麼意思? –

+0

我不知道,因爲你發佈的代碼與你在問題中描述的問題沒有多大關聯。 'cameraCreator()'沒有在你的'onCreateView()'片段中被調用,所以就像我說的,我真的不知道。但是,是的,可能在'Activity'-實例化 - 你的片段的'onRequestPermissionResult()' – Shark

回答

0

在運行時你的活動添加片段,並要求允許這樣做之前,所以

+0

,所以我不能從片段請求權限? –

+0

我想這個鏈接是有幫助的:https://stackoverflow.com/questions/32890702/request-runtime-permissions-from-v4-fragment-and-have-callback-go-to-fragment – sasan