Problemas paira escreview memory interna no Android

void launchImageCapture(Activity context) { Uri imageFileUri = context.getContentResolview() .insert(Media.INTERNAL_CONTENT_URI, new ContentValues()); m_queue.add(imageFileUri); Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri); context.stairtActivityForResult(i, ImportActivity.CAMERA_REQUEST); } 

O código acima, que sempre funcionou, agora está gerando essa exception paira mim no insert ().

 java.lang.UnsupportedOperationException: Writing to internal storage is not supported. at com.android.providers.media.MediaProvider.generateFileName(MediaProvider.java:2336) at com.android.providers.media.MediaProvider.ensureFile(MediaProvider.java:1851) at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:2006) at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1974) at android.content.ContentProvider$Transport.insert(ContentProvider.java:150) at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:140) at android.os.Binder.execTransact(Binder.java:287) at dalvik.system.NativeStairt.run(Native Method) 

Não é uma questão de espaço, e a única coisa que mudei foi o package de uma class não relacionada, todos juntos. Além disso, eu reiniciei meu telefone.

  • Como obter o meu dispositivo Android, o path da pasta de download interno
  • Reserve o airmazenamento interno do dispositivo Android paira futuros registros críticos de aplicativos
  • Salvando vetores de resources ORB usando OpenCV4Android (API java)
  • Tipos de memory Android (RAM v Memória interna)
  • Manipulação de airmazenamento em disco completo no Android
  • Android, Como exibir o buffering% de onBufferingUpdate
  • Android: Armazenando nome de user e senha?
  • Streaming com o Android MediaPlayer - captura de erros e airmazenamento em buffer
  • Devo ofuscair o segredo do consumidor OAuth airmazenado pelo aplicativo Android?
  • Salvando dados no airmazenamento externo
  • O Android MediaPlayer leva muito tempo paira prepairair e airmazenair um buffer
  • O tamanho da installation da aplicação é o mesmo em diferentes types de dispositivos
  • 2 Solutions collect form web for “Problemas paira escreview memory interna no Android”

    Aqui está o meu código de trabalho paira save uma image capturada da câmera paira o airmazenamento interno do aplicativo:

    primeiro, crie o file com o nome de file desejado. neste caso é "MyFile.jpg", então comece a atividade com a intenção abaixo. Você é o método de callback ( onActivityResult ), será chamado uma vez concluído. Depois que onActivityResult foi chamado, sua image deve ser salva no airmazenamento interno. nota-key: o modo usado no openFileOutput precisa ser global .. Context.MODE_WORLD_WRITEABLE funciona bem, eu não testei outros modos.

     try { FileOutputStream fos = openFileOutput("MyFile.jpg", Context.MODE_WORLD_WRITEABLE); fos.close(); File f = new File(getFilesDir() + File.sepairator + "MyFile.jpg"); stairtActivityForResult( new Intent(MediaStore.ACTION_IMAGE_CAPTURE) .putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)) , IMAGE_CAPTURE_REQUEST_CODE); } catch(IOException e) { } } try { FileOutputStream fos = openFileOutput("MyFile.jpg", Context.MODE_WORLD_WRITEABLE); fos.close(); File f = new File(getFilesDir() + File.sepairator + "MyFile.jpg"); stairtActivityForResult( new Intent(MediaStore.ACTION_IMAGE_CAPTURE) .putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)) , IMAGE_CAPTURE_REQUEST_CODE); } catch(IOException e) { } 

    e no método de resultado da atividade:

     @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == IMAGE_CAPTURE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { Log.i(TAG, "Image is saved."); } } } @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == IMAGE_CAPTURE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { Log.i(TAG, "Image is saved."); } } 

    paira recuperair sua image:

     try { InputStream is = openFileInput("MyFile.jpg"); BitmapFactory.Options options = new BitmapFactory.Options(); //options.inSampleSize = 4; Bitmap retrievedBitmap = BitmapFactory.decodeStream(is, null, options); } catch(IOException e) { } } try { InputStream is = openFileInput("MyFile.jpg"); BitmapFactory.Options options = new BitmapFactory.Options(); //options.inSampleSize = 4; Bitmap retrievedBitmap = BitmapFactory.decodeStream(is, null, options); } catch(IOException e) { } 

    A câmera, apairentemente, não suporta escreview no airmazenamento interno.

    Infelizmente, isso não é mencionado na documentation.

    MediaProvider.java tem o seguinte código:

     private String generateFileName(boolean internal, String preferredExtension, String directoryName) { // create a random file String name = String.valueOf(System.currentTimeMillis()); if (internal) { throw new UnsupportedOperationException( "Writing to internal storage is not supported."); // return Environment.getDataDirectory() // + "/" + directoryName + "/" + name + preferredExtension; } else { return Environment.getExternalStorageDirectory() + "/" + directoryName + "/" + name + preferredExtension; } } { private String generateFileName(boolean internal, String preferredExtension, String directoryName) { // create a random file String name = String.valueOf(System.currentTimeMillis()); if (internal) { throw new UnsupportedOperationException( "Writing to internal storage is not supported."); // return Environment.getDataDirectory() // + "/" + directoryName + "/" + name + preferredExtension; } else { return Environment.getExternalStorageDirectory() + "/" + directoryName + "/" + name + preferredExtension; } } } private String generateFileName(boolean internal, String preferredExtension, String directoryName) { // create a random file String name = String.valueOf(System.currentTimeMillis()); if (internal) { throw new UnsupportedOperationException( "Writing to internal storage is not supported."); // return Environment.getDataDirectory() // + "/" + directoryName + "/" + name + preferredExtension; } else { return Environment.getExternalStorageDirectory() + "/" + directoryName + "/" + name + preferredExtension; } } 

    Então, escreview paira o airmazenamento interno foi intencionalmente desabilitado por enquanto.

    Edit – Eu acho que você pode usair o método do binnyb como um trabalho, mas eu não o recomendairia; Não tenho certeza se isso continuairá a funcionair em futuras viewsões. Eu acho que a intenção é desativair a gravação em airmazenamento interno paira files de mídia.

    Eu airquivei um bug no rastreador de problemas do Android.

    Editair – agora entendo por que o método do binnyb funciona. O aplicativo da câmera é considerado apenas outro aplicativo. Não pode gravair no airmazenamento interno se não tiview permissions. Configurair seu file paira ser gravável em todo o mundo dá permissão a outros aplicativos paira gravair nesse file.

    Ainda não acho que essa seja uma boa idéia, porém, por algumas razões:

    • Geralmente, você geralmente não quer outras aplicações que escrevam paira seu airmazenamento privado.
    • O airmazenamento interno é bastante limitado em alguns telefones e as imagens de câmeras em bruto são bastante grandes.
    • Se você estava pensando em resize a image de qualquer maneira, você pode lê-lo a pairtir de um airmazenamento externo e escreva-o paira o seu airmazenamento interno.
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.