2017-10-15 1 views
0

外部ストレージに画像ファイルを作成して共有しようとしています。私は今まで、いくつかのエラーFile.createNewFile()を呼び出すときに許可が拒否されました。 Android

 var icon: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.namelogo) 

     val shareIntent = Intent(Intent.ACTION_SEND) 
     shareIntent.type = "image/*" 
     val bytes = ByteArrayOutputStream() 
     icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes) 
     val path = File.separator + "temporary_file.jpg" 

     val f = File(Environment.getExternalStorageDirectory().toString(), path) 
     try { 


      if (!f.parentFile.exists()) 
       f.parentFile.mkdirs() 
      if (!f.exists()) 
       f.createNewFile() 
      f.createNewFile() 
      val fo = FileOutputStream(f) 

      fo.write(bytes.toByteArray()) 
     } catch (e: IOException) { 
      Log.e("path = ", "+ $path " + e.toString()) 
      e.printStackTrace() 
     } 

     shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/IronyBalls/temporary_file.jpg")); 
     startActivity(Intent.createChooser(shareIntent, "Share Image")) 

を持っています、次のコードをしようとしているときに、私は解決策が唯一の私が持っている権限に

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

を設定する

if (!f.parentFile.exists()) 
     f.parentFile.mkdirs() 
if (!f.exists()) 
     f.createNewFile() 

を使用することが判明しましたすでに使用されています。ただし、 はエラータブ

E /パス=:+ /temporary_file.jpgのにjava.io.IOException:許可が

情報]タブで

W /システム

を否定しました。エラー:java.io.IOException:許可が拒否された

W/System.err: java.io.UnixFileSystem.createFileE xclusively0(ネイティブメソッド)

W/System.errの:java.io.File.createNewFileで(: java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:280)

W/System.errのでFile.java:948) W/System.errの:277)

W/System.errの:android.view.Viewで com.irony.balls.MainActivity $のonCreate $ 8.onClick(MainActivity.ktで.performClick(View.java:5611)

10-15 20:33:17.912 29759-29759/com.irony.balls W/System.e rr:at android.view.View $ PerformClick.run(View.java:22276)10-15 20:33:17.912 29759-29759/com.irony.balls W/System.err: android.os .Handler.handleCallback(Handler.java:751)10-15 20:33:17.912 29759-29759/com.irony.balls W/System.err: android.os.Handler.dispatchMessage(Handler.java:751) 95)10-15 20:33:17.912 29759-29759/com.irony.balls W/System.err: android.os.Looper.loop(Looper.java:154)10-15 20:33: 17.912 29759-29759/com.irony.balls W/System.err: android.app.ActivityThread.main(ActivityThread.java:6195)10-15 20:33:17.912 29759-29759/com.irony。ボールW/System.err: java.lang.reflect.Method.invoke(ネイティブメソッド)10-15 20:33:17.912 29759-29759/com.irony.balls W/System.err: com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:874)

10-15 20:33:17.912 29759から29759/com.irony.balls W/System.errの: com.android.internal.os.ZygoteInitで。 main(ZygoteInit。java:764)

+0

あなたの 'targetSdk'とは何ですか? –

+0

@H.Brooks 'targetSdk'は26 –

+1

です。そうすれば、実行時の権限が必要になります。回避策は' targetSdk'を23に変更することです.24の実行時権限が必要です。 –

答えて

関連する問題