2017-01-18 9 views
0

I startActivityForResult от одного из моих viewpager фрагмент для получения изображения с камеры, но это нормально в версии для Android 5 и меньше, но в версии для Android 6 у меня проблема.не может получить изображение с камеры в android 6

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 

     Toast.makeText(getActivity(), "we are here Resultcode: "+requestCode, Toast.LENGTH_SHORT).show(); 
      if(resultCode!=-1 && data==null) 
       return; 
     Toast.makeText(getActivity(),"Getting readdy for image",Toast.LENGTH_LONG).show(); 
      switch(requestCode) { 
       case PICK_IMAGE_ID: 
        Bitmap bitmap = ImagePicker.getImageFromResult(getActivity(), resultCode, data); 
       /* Prescription_img=(ImageView)getActivity().findViewById(R.id.prescription); 
       Prescription_img.setImageBitmap(bitmap);*/ 
        Toast.makeText(getActivity(),"We are inside ",Toast.LENGTH_LONG).show(); 
        File file= null; 
        try { 
         file = savebitmap(bitmap); 
         Log.d("file:",file.getName() + " |is the file exist: "+file.getAbsolutePath()); 
         f=file; 
         //control fragment menu to show step to get prescription from drugstore 
         Toast.makeText(getActivity(),"gott",Toast.LENGTH_LONG).show(); 

         Log.i("getImage", "image gotten successfully"); 
         Bundle args=new Bundle(); 
         args.putString("image",f.getAbsolutePath()); 
         _step2_fragmentconfirm_pic confirmPicFragment=new _step2_fragmentconfirm_pic(); 
         confirmPicFragment.setArguments(args); 
         Toast.makeText(getActivity(),"getting image ready",Toast.LENGTH_LONG).show(); 
         FragmentTransaction transaction=getFragmentManager().beginTransaction(); 
         transaction.replace(R.id.root_menu_fragment,confirmPicFragment); 
         transaction.commit(); 


        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        break; 
       default: 
        super.onActivityResult(requestCode, resultCode, data); 
        break; 
      } 
      Log.d("ImageGallary:",Integer.toString(requestCode)); 

     } 

и метод getImageFromResult в классе ImagePicker здесь:

public static Bitmap getImageFromResult(Context context, int resultCode, 
             Intent imageReturnedIntent) { 
    Log.d(TAG, "getImageFromResult, resultCode: " + resultCode); 
    Bitmap bm = null; 
    File imageFile = getTempFile(context); 
    if (resultCode == Activity.RESULT_OK) { 
     Uri selectedImage; 
     boolean isCamera = (imageReturnedIntent == null || 
       imageReturnedIntent.getData() == null || 
       imageReturnedIntent.getData().toString().contains(imageFile.toString())); 
     if (isCamera) {  /** CAMERA **/ 
      selectedImage = Uri.fromFile(imageFile); 
     } else {   /** ALBUM **/ 
      selectedImage = imageReturnedIntent.getData(); 
     } 
     Log.d(TAG, "selectedImage: " + selectedImage); 

     bm = getImageResized(context, selectedImage); 
     int rotation = getRotation(context, selectedImage, isCamera); 
     bm = rotate(bm, rotation); 
    } 
    return bm; 

} 

Я проследил приложение и узнать, что в Ьгу блоке, когда я хочу, чтобы получить файл из savebitmap он застрелил меня, чтобы поймать раздел на эта линия:

file = savebitmap(bitmap); 

, а также это мой полный класс imagepicker:

https://gist.github.com/anonymous/18a0752722e877ac6b15b7a7be16f573

Я попытался получить сообщение об ошибке в блоке catch этой командой Log.i («Ошибка», e.getMessage()); и получить это сообщение:

01-18 10:25:21.462 269-618/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.462 269-15025/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 185208591, value : 202116107 
01-18 10:25:21.502 269-8865/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.502 269-15029/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 319819276, value : 319818764 
01-18 10:25:21.532 269-1526/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.542 269-15033/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 286330641, value : 269553937 
01-18 10:25:21.552 269-24674/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.562 269-15038/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 286330641, value : 269553937 
01-18 10:25:21.582 269-269/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.592 269-15042/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 54424, value : 0 
01-18 10:25:21.762 269-619/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.772 269-15057/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 319819276, value : 319818764 
01-18 10:25:21.802 269-618/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.812 269-15061/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 151587081, value : 151587081 
01-18 10:25:21.872 269-14940/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.922 269-8865/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.932 269-15075/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 319819276, value : 319818764 
01-18 10:25:21.972 269-269/? V/AwesomePlayer: startAudioPlayer_l, sendErrorNotification (0) 
01-18 10:25:21.982 269-15079/? E/AudioPlayer: >>> setAudioEffect Error mAudioFormat : 1, event : 319819276, value : 319818764 
01-18 10:25:35.842 216-216/? E/lowmemorykiller: Error writing /proc/8061/oom_score_adj; errno=22 
01-18 10:25:35.862 216-216/? E/lowmemorykiller: Error writing /proc/8061/oom_score_adj; errno=22 
+0

Каковы ошибки? –

+0

@VivekMishra я снова отредактировал вопрос, пожалуйста, просмотрите его снова – AndroidDev

+0

Эти журналы не связаны с вашим приложением. Опубликовать связанный –

ответ

1

В Android 6 вам нужно сделать во время выполнения permisions

https://developer.android.com/training/permissions/requesting.html

Пример

if (checkSelfPermission(Manifest.permission.CAMERA) 
    != PackageManager.PERMISSION_GRANTED) { 

    requestPermissions(new String[]{Manifest.permission.CAMERA , Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
     MY_REQUEST_CODE); 
} 

и в результате деятельности (убедитесь, что вы не не беспокоить текущий)

@Override 
public void onRequestPermissionResult(int requestCode, String[] permissions,  int[] grantResults) { 
    if (requestCode == MY_REQUEST__CODE) { 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // Now user should be able to use camera 
     } 
    else { 
     // Your app will not have this permission. Turn off all functions 
     // that require this permission or it will force close like your 
     // original question 
     } 
    } 
} 

Этот код должен запускаться перед тем, как идти в камеру, пользователь предоставит вам разрешение использовать камеру и сохранить изображение на внешний, если он не даст вам этого не делать и отправить сообщение, которое вы требуется разрешение для этого.