ContextWrapper.GetExternalFilesDir(String) Método

Definição

Retorna o caminho absoluto para o diretório no sistema de arquivos externo primário (que está em algum lugar) ExternalStorageDirectoryem que o aplicativo pode colocar arquivos persistentes que possui.

[Android.Runtime.Register("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", "GetGetExternalFilesDir_Ljava_lang_String_Handler")]
public override Java.IO.File? GetExternalFilesDir(string? type);
[<Android.Runtime.Register("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", "GetGetExternalFilesDir_Ljava_lang_String_Handler")>]
override this.GetExternalFilesDir : string -> Java.IO.File

Parâmetros

type
String

O tipo de diretório de arquivos a ser retornado. Pode ser nulo para a raiz do diretório de arquivos ou uma das seguintes constantes de ambiente para um subdiretório: DirectoryMusic, , DirectoryPodcasts, DirectoryRingtones, DirectoryAlarms, DirectoryNotifications, DirectoryPicturesou DirectoryMovies.

Retornos

Retorna o caminho absoluto para o diretório no dispositivo de armazenamento compartilhado/externo primário em que o aplicativo pode colocar arquivos persistentes que possui. Esses arquivos são internos para os aplicativos e normalmente não são visíveis para o usuário como mídia. Isso é como getFilesDir() porque esses arquivos serão excluídos quando o aplicativo for desinstalado, no entanto, há algumas diferenças importantes: o armazenamento compartilhado pode nem sempre estar disponível, pois a mídia removível pode ser ejetada pelo usuário. O estado da mídia pode ser verificado usando Environment.getExternalStorageState(File) . Não há nenhuma segurança imposta com esses arquivos. Por exemplo, qualquer aplicativo que contém Manifest.permission.WRITE_EXTERNAL_STORAGE pode gravar nesses arquivos. Se um dispositivo de armazenamento compartilhado for emulado (conforme determinado por Environment.isExternalStorageEmulated(File), seu conteúdo será apoiado por uma partição de dados de usuário privado, o que significa que há pouco benefício em armazenar dados aqui em vez dos diretórios privados retornados por getFilesDir() etc. Começando em Build.VERSION_CODES. KITKAT, nenhuma permissão é necessária para ler ou gravar no caminho retornado; é sempre acessível ao aplicativo de chamada. Isso só se aplica aos caminhos gerados para o nome do pacote do aplicativo de chamada. Para acessar caminhos pertencentes a outros pacotes, Manifest.permission.WRITE_EXTERNAL_STORAGE e/ou Manifest.permission.READ_EXTERNAL_STORAGE são necessários. Em dispositivos com vários usuários (conforme descrito pelo UserManager), cada usuário tem seu próprio armazenamento compartilhado isolado. Os aplicativos só têm acesso ao armazenamento compartilhado para o usuário em que estão sendo executados. O caminho retornado poderá ser alterado ao longo do tempo se diferentes mídias de armazenamento compartilhadas forem inseridas, portanto, somente os caminhos relativos devem ser persistidos. Aqui está um exemplo de código típico para manipular um arquivo no armazenamento compartilhado de um aplicativo: void createExternalStoragePrivateFile() { // Criar um caminho em que colocaremos nosso arquivo privado no armazenamento externo //. Arquivo de arquivo = novo Arquivo(getExternalFilesDir(null), "DemoFile.jpg"); try { // Código muito simples para copiar uma imagem do recurso // do aplicativo para o arquivo externo. Observe que esse código não faz // nenhuma verificação de erro e pressupõe que a imagem seja pequena (não // tente copiá-la em partes). Observe que, se o armazenamento externo estiver //não montado no momento, isso falhará silenciosamente. InputStream is = getResources().openRawResource(R.drawable.balloons); OutputStream os = new FileOutputStream(file); byte[] data = new byte[is.available()]; is.read(data); os.write(data); is.close(); os.close(); } catch (IOException e) { // Não é possível criar arquivo, provavelmente porque o armazenamento externo não está // montado no momento. Log.w("ExternalStorage", "Error writing" + file, e); } void deleteExternalStoragePrivateFile() { // Obter caminho para o arquivo no armazenamento externo. Se o armazenamento externo // não estiver montado no momento, isso falhará. Arquivo de arquivo = novo Arquivo(getExternalFilesDir(null), "DemoFile.jpg"); file.delete(); } boolean hasExternalStoragePrivateFile() { // Obter caminho para o arquivo no armazenamento externo. Se o armazenamento externo // não estiver montado no momento, isso falhará. Arquivo de arquivo = novo Arquivo(getExternalFilesDir(null), "DemoFile.jpg"); return file.exists(); } Se você fornecer um tipo não nulo para essa função, o arquivo retornado será um caminho para um subdiretório do tipo fornecido. Embora esses arquivos não sejam verificados automaticamente pelo verificador de mídia, você pode adicioná-los explicitamente ao banco de dados de mídia com MediaScannerConnection.scanFile. Observe que isso não é o mesmo que Environment.getExternalStoragePublicDirectory() , que fornece diretórios de mídia compartilhados por todos os aplicativos. Os diretórios retornados aqui pertencem ao aplicativo e seu conteúdo será removido quando o aplicativo for desinstalado. Ao contrário de Environment.getExternalStoragePublicDirectory() , o diretório retornado aqui será criado automaticamente para você. Aqui está um exemplo de código típico para manipular uma imagem no armazenamento compartilhado de um aplicativo e adicioná-la ao banco de dados de mídia: void createExternalStoragePrivatePicture() { // Criar um caminho em que colocaremos nossa imagem em nosso próprio diretório de imagens //privadas. Observe que realmente não precisamos colocar uma imagem //em DIRECTORY_PICTURES, pois o verificador de mídia verá // todas as mídias nesses diretórios; isso pode ser útil com outros tipos de mídia //, como DIRECTORY_MUSIC no entanto, para ajudá-lo a classificar // sua mídia para exibição para o usuário. Caminho do arquivo = getExternalFilesDir(Environment.DIRECTORY_PICTURES); Arquivo de arquivo = novo Arquivo(caminho, "DemoPicture.jpg"); try { // Código muito simples para copiar uma imagem do recurso // do aplicativo para o arquivo externo. Observe que esse código não faz // nenhuma verificação de erro e pressupõe que a imagem seja pequena (não // tente copiá-la em partes). Observe que, se o armazenamento externo estiver //não montado no momento, isso falhará silenciosamente. InputStream is = getResources().openRawResource(R.drawable.balloons); OutputStream os = new FileOutputStream(file); byte[] data = new byte[is.available()]; is.read(data); os.write(data); is.close(); os.close(); Informe o verificador de mídia sobre o novo arquivo para que ele esteja // imediatamente disponível para o usuário. MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); } catch (IOException e) { // Não é possível criar arquivo, provavelmente porque o armazenamento externo não está // montado no momento. Log.w("ExternalStorage", "Error writing" + file, e); } void deleteExternalStoragePrivatePicture() { // Criar um caminho em que colocaremos nossa imagem no diretório de imagens públicas // do usuário e excluiremos o arquivo. Se o armazenamento externo // não estiver montado no momento, isso falhará. Caminho do arquivo = getExternalFilesDir(Environment.DIRECTORY_PICTURES); if (path != null) { File file = new File(path, "DemoPicture.jpg"); file.delete(); } } boolean hasExternalStoragePrivatePicture() { // Criar um caminho em que colocaremos nossa imagem no diretório de imagens públicas // do usuário e verificaremos se o arquivo existe. Se o armazenamento externo // não estiver montado no momento, isso achará que a imagem // não existe. Caminho do arquivo = getExternalFilesDir(Environment.DIRECTORY_PICTURES); if (path != null) { File file = new File(path, "DemoPicture.jpg"); return file.exists(); } retornar false; } Parâmetros tipo Cadeia de caracteres: esse valor pode ser nulo. Retorna Arquivo Esse valor pode ser nulo.

Atributos

Comentários

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Java documentação para android.content.ContextWrapper.getExternalFilesDir(java.lang.String).

Aplica-se a