2017-01-20 3 views
0

내 활동의 스크린 샷을 찍어서 파일 을 저장할 수 있지만 공유하려고하면 첨부 파일을로드하지 못했습니다. 나는 android에서 새로운입니다. 어떤 도움이 유용 할 것입니다. 그것은 나에게 오류를 제공하지 않습니다Android : 첨부 파일 오류를로드하지 못했습니다?

public Bitmap takeScreenshot() { 
    View rootView = getWindow().getDecorView().findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
    Bitmap bitmap = Bitmap.createBitmap(rootView.getDrawingCache()); 
    rootView.setDrawingCacheEnabled(false); 
    Log.i("Screenshot","TAKEN"); 
    return bitmap; 

} 

public void saveBitmap(Bitmap bitmap) { 
    imagePath = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/screenshot.png"); 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(imagePath); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
     Log.i("Screenshot","SAVED at"+imagePath); 
     fos.flush(); 
     fos.close(); 
    } catch (IOException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } 
} 

private void shareIt() { 
    Uri uri = Uri.fromFile(imagePath); 
    Intent sharingIntent = new Intent(Intent.ACTION_SEND); 
    sharingIntent.setType("image/*"); 
    String shareBody = "My highest score is "; 
    sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "My score"); 
    sharingIntent.putExtra(Intent.EXTRA_TEXT, shareBody); 
    sharingIntent.putExtra(Intent.EXTRA_STREAM, uri); 
    Log.i("IMAGE SHARING","TRY..."); 

    try { 
     startActivity(Intent.createChooser(sharingIntent, "Share via")); 
    }catch(Exception e){ 
     Log.i("try","failed"); 
     Toast.makeText(getApplicationContext(), "No App Available", Toast.LENGTH_SHORT).show(); 
    } 
} 

하지만 난 그것을 공유하려고 할 때, 그것은 나에게 "첨부 파일을로드하지 못했습니다"제공 :

이 내 코드입니다. 내가 어디로 잘못 가고 있니? 10 : LOG

01-20 21

53.689 3553-3582/com.quickyy.guess.com.quickyy W/OpenGLRenderer : 표면 0xac3d5c60 에러 = EGL_BAD_MATCH에 EGL_SWAP_BEHAVIOR을 설정하는 데 실패

01 -20 21 : 10 : 53.886 3553-3582/com.quickyy.guess.com.quickyy E/Surface : getSlotFromBufferLocked : 알 수없는 버퍼 : 0xb40974e0

01-20 21 : 10 : 55.259 3553-3553/com.quickyy. guess.com.quickyy I/Screenshot : TAKEN

01-20 21 : 10 : 55.340 3553-3553/com. quickyy.guess.com.quickyy I/Screenshot :/storage/emulated/0/screenshot.png에 저장 됨

01-20 21 : 10 : 55.506 3553-3553/com.quickyy.guess.com.quickyy I/이미지 공유, 시도 ...

01-20 21 : 10 : 58.858 3553-3582/com.quickyy.guess.com.quickyy E/표면은 : getSlotFromBufferLocked 불명 완충액 : 0xb4097a90

01-20 21 : 11 : 03.767 3553-3582/com.quickyy.guess.com.quickyy E/EGL_emulation : tid 3582 : eglSurfaceAttrib (1165) : 오류 0x3009 (EGL_BAD_MATCH)

01-20 21 : 11 : 03.767 3553-3582/com.quickyy.guess.com.quickyy W/OpenGLRenderer : 실패 표면 0xac3d5c60에 EGL_SWAP_BEHAVIOR을 (를) 설정하려면 error = EGL_BAD_MATCH

+0

바꾸기'이미지/*''이미지/jpeg'와. saveBitmap()을 백그라운드 스레드로 옮기고'fos.flush()'와'fos.close()'사이에'fos.getFD(). sync()'를 추가하십시오. 안드로이드 7.0+에서,'targetSdkVersion'이 24 이상이되면, 더 이상'Uri.fromFile()'을 사용할 수 없으며 대신'FileProvider' 또는 동등한 것을 사용해야 할 것입니다. 또한'ACTION_SEND' 구현체는 동일한'Intent'에 대해'EXTRA_TEXT'와'EXTRA_STREAM'을 모두 지원할 필요는 없습니다. – CommonsWare

+0

logcat을 추가하여 어떤 일이 일어나고 있는지 더 잘 알 수 있습니다. –

+0

Log.i ("try", "failed");'가 _failed_를 반환했다고 가정합니다. 이 로그 라인을'Log.e ("try", "failed", e);'; LogCat에 예외를 덤프합니다. 이 출력을 포함 시키려면 질문을 편집하십시오. –

답변

0

미디어 저장소에 대한 사용 권한을 설정 했습니까?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

그리고 코드 5> 안드로이드 경우

:

private static final int REQUEST_MEDIA = 1; 
private static String[] PERMISSIONS_STORAGE = { 
     Manifest.permission.READ_EXTERNAL_STORAGE, 
     Manifest.permission.WRITE_EXTERNAL_STORAGE, 
}; 

int permissionMedia = ActivityCompat.checkSelfPermission(PSImageBig.this, Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    if (permissionMedia != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(PSImageBig.this, PERMISSIONS_STORAGE, REQUEST_MEDIA); 
    }else{ 
     //code to take screenshot 
    } 

    @Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    Log.i("", "handleSignInResult onRequestPermissionsResult:" + requestCode); 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if(requestCode == 1){ 
     if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         //code to take screenshot 
      } 
     } 
    } 
} 
+0

예 사용 권한을 사용했으며 동일한 항목도 확인했습니다. – user3762660

관련 문제