2014-05-08 141 views
0

我能夠從圖庫中拍攝圖片,但是發現攝像頭在片段中捕獲問題。 在拍攝onActivityResult圖片後有時會調用它,並在調用時會給出一些未找到的異常文件。在android片段中拍攝來自攝像頭的圖片不起作用

我的代碼是

if (requestCode == CAMERA_REQUEST && resultCode == getActivity().RESULT_OK) { 
if(flag==0){ 
    try{     
     String URI = getImageURI(); 
     String imageName = URI.substring(URI.lastIndexOf("/")+1); 
     FileInputStream fis = mContext.openFileInput(imageName); 
     Bitmap photo = BitmapFactory.decodeStream(fis); 
     Matrix matrix = new Matrix(); 
     matrix.preRotate(90); 
     photo = Bitmap.createBitmap(photo , 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); 
    } 
    catch(Exception e){ 
      Log.e("Error - ",e.getMessage()); 
    } 
    } 
} 

public void takePictureFromCamera(){ 
       File style = new File(Environment.getExternalStorageDirectory(),"style"); 
     if(!style.exists()){style.mkdir();} 
     String d = System.currentTimeMillis()+""; 
     File f = new File(style, d+"style.jpg"); 
     absPath = f.getAbsolutePath(); 
     savePref(absPath); 
     cameraImagePath = Uri.fromFile(f); 
     takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, cameraImagePath); 
     } 
     getActivity().startActivityForResult(takePictureIntent, CAMERA_REQUEST); 
    } 
+1

1.對於「現在發現文件錯誤」在您正在測試的設備上,即Nexus不支持內存卡,因此無法使用** getExternalStorageDirectory **方法獲取,或者第二個原因是您沒有在清單中添加寫入權限, 2. for ** onActivtyResult未被調用**原因是因爲它調用了它的超級活動的onActivityResult,因此您可能需要從那裏調用子片段的方法。 – swiftBoy

+0

Thannks爲你的答案,我正在三星Galaxy S4上測試它,並在manifest.And中添加權限。我必須從onActivityResult調用你提及的那個調用子片段方法的方法。 – Ravi

回答

1

這是我如何處理我的方法onActivityResult問題的步驟。

我有一個MainActivity和一個孩子的片段。 現在我的Fragment的onActivityResult沒有被調用,而是調用MainActivity的(超級)onActivityResult。所以下面 是示例代碼剪斷得到它的工作

  1. 這種「onActivityResult」我已經覆蓋在我的主要活動,從這裏如果需要的話,我呼籲孩子片段的onActivityResult方法。

    保護無效onActivityResult(INT requestCode,INT resultCode爲,意圖數據)

    { 
        super.onActivityResult(requestCode, resultCode, data); 
    
        switch (requestCode) 
         { 
        case Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE: 
        { 
         Fragment fragment = getFragmentManager().findFragmentById(R.id.content_frame); 
         fragment.onActivityResult(requestCode, resultCode, data); 
        } 
    
         break; 
    
        default: 
         break; 
        }  
    } 
    

「content_frame」 是框架佈局我的主要活動的XML文件中

<FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

我開始,我在MainActivity類中使用此配置文件碎片

ProfileFragment fragment = new ProfileFragment(); 
    Bundle args2 = new Bundle(); 
    args2.putInt(ActivityFeedFragment.ARG_NAVIGATIN_LIST_NUMBER, position); 
    args2.putString(Utils.serfrmuserid, AssetPref.getString(Utils.User_ID, null)); 
    fragment.setArguments(args2); 

    FragmentManager fragmentManager2 = getFragmentManager(); 
    fragmentManager2.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
+1

在我的活動中添加onActivityResult並在修改後代碼爲我工作。感謝您拯救我的生命。 – Ravi

+0

@ rb16很高興聽到這是有益的..乾杯! :) – swiftBoy

相關問題