0

我試圖做一個簡單的應用程序,使用手機相機,所以我跟着這個tutorial 基本上我有一個上點擊啓動相機晶圓廠,這是結果:startActivityForResult不觸發onActivityResult

Result

它啓動相機,因爲它應該...

如果我關閉相機它打印「REQUEST_PHOTO」和「活動結束」,但如果我拍張照片,然後點擊鼠標右鍵,接受它沒有任何反應。該按鈕不起作用,onActivityResult方法未被調用。

在這裏,你可以看到在onActivityResult方法日誌代碼的相關部分:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ... 

     if(hasCamera()) { 
      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        launchCamera(); 
       } 
      }); 
     } 
    } 

    ... 

    private void launchCamera() { 

     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     ... 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      ... 
      photoURI = FileProvider.getUriForFile(...); 

      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 

     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case REQUEST_TAKE_PHOTO: 
       Log.d("DEBUG", "REQUEST_PHOTO"); 
       if (resultCode == RESULT_OK) { 
        Log.d("DEBUG", "REQUEST_PHOTO RESULT_OK"); 
       } 
       break; 
     } 

     Log.d("DEBUG", "ACTIVITY FINISHED"); 
    } 
} 

不僅我不理解爲什麼該方法不被調用,接受按鈕被「封鎖「但我也不明白爲什麼只有按下退出按鈕時才調用該方法。

有什麼想法?

謝謝!

+0

哪個版本的設備正在測試此代碼。希望你有棉花糖版本之後所有必要的許可,並且有必須由用戶授予的危險許可。 –

+0

在將URI傳遞給相機應用程序之前,您是否創建了該文件? – makovkastar

+0

@makovkastar我創建的文件就像[tutorial](https://developer.android.com/training/camera/photobasics.html)說的那樣(createImageFile()函數) –

回答

0

如果文件不存在,Camera活動將不會返回。這是一種情況。

+0

是的,這可能是其中之一案子。 –

+0

如果您在調用之前直接引用您尚未創建的文件夾中的文件,這可能也會導致此類問題。在這種情況下,首先調用創建文件夾。 – MobileEvangelist

0

你必須給允許訪問攝像頭

<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>

我認爲你正在使用模擬器進行測試,請使用真實的設備。

0

試試這個你的問題將得到解決:

if(hasCamera()) { 
      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent chooseImageIntent = ImagePicker.getPickImageIntent(YourActivity.this); 

        startActivityForResult(chooseImageIntent, REQUEST_TAKE_PHOTO); 
       } 
      }); 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case REQUEST_TAKE_PHOTO: 
       Log.d("DEBUG", "REQUEST_PHOTO"); 
       if (resultCode == RESULT_OK) { 
        bm = ImagePicker.getImageFromResult(this, resultCode, data); 
       if (bm != null) { 
        bm = Bitmap.createScaledBitmap(bm,256,256, true); 

        upload_img.setImageBitmap(bm); 
       } 
       } 
       break; 
     } 

     Log.d("DEBUG", "ACTIVITY FINISHED"); 
    } 
相關問題