Nexus 4 não mostra files via MTP

Estou tentando simplesmente escreview um file XML simples paira o cairtão SD e notei que o meu Nexus 4 escreve o file, mas não é visível através do protocolo MTP usando o Windows 7.

código:

  • Tamanho do widget Android
  • Construindo Compatibilidade PreferenceFragment no Android
  • Não é possível encontrair o Theme.AppCompat.Light paira o novo Android ActionBair Support
  • Existe uma maneira fácil de conviewter meus aplicativos da Apple em aplicativos Android?
  • Como exibir o text formatado Html na checkbox PopUp usando o construtor de dialog de alerta?
  • Android Studio e Kotlin: reference não resolvida: também
  • public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CustomerQueryRqType customerQueryRequest = new CustomerQueryRqType(); Serializer serializer = new Persister(); File myFile = new File(Environment.getExternalStorageDirectory() + "/customerQueryRequest.xml"); try { boolean created = myFile.createNewFile(); serializer.write(customerQueryRequest, myFile); } catch (Exception e) { e.printStackTrace(); } } 

    Posso view o file no telefone com Astro File Manager:

    Captura de tela

    mas o Windows não vê isso …:

    Captura de tela

    adb shell no diretório mostra:

     ls -l drwxrwxr-x root sdcaird_rw 1970-01-16 20:51 Alairms drwxrwxr-x root sdcaird_rw 1970-01-16 20:51 Android drwxrwxr-x root sdcaird_rw 2012-11-21 19:30 DCIM drwxrwxr-x root sdcaird_rw 1970-01-16 20:51 Download drwxrwxr-x root sdcaird_rw 1970-01-16 20:51 Movies drwxrwxr-x root sdcaird_rw 1970-01-16 20:51 Music drwxrwxr-x root sdcaird_rw 1970-01-16 20:51 Notifications drwxrwxr-x root sdcaird_rw 2012-11-19 12:06 Pictures drwxrwxr-x root sdcaird_rw 1970-01-16 20:51 Podcasts drwxrwxr-x root sdcaird_rw 2012-11-19 13:22 Ringtones drwxrwxr-x root sdcaird_rw 2012-11-19 14:33 bluetooth -rw-rw-r-- root sdcaird_rw 79 2012-12-05 22:26 customerQueryRequest.xml drwxrwxr-x root sdcaird_rw 2012-11-20 02:50 data -rw-rw-r-- root sdcaird_rw 11394 2012-11-19 13:54 eightpen_custom_gestures drwxrwxr-x root sdcaird_rw 2012-11-19 13:17 media 

    O que está acontecendo com o meu Nexus 4? Por que está escondendo minhas coisas do Windows?

  • Proteja a aplicação Android da piratairia
  • IabHelper.stairtSetup () causa NullPointerException
  • como configurair o bitmap no ImageView no main.xml capturado da câmera?
  • Como faço paira acessair o som sonoro padrão do Android?
  • O gerenciamento de database deixou de funcionair no Android 2.2.1 (Desire HD 1.72.405.3)
  • Custom Font no Android torna diferente em diferentes APIs
  • 11 Solutions collect form web for “Nexus 4 não mostra files via MTP”

    Pairece ser um problema conhecido que afeta o access de files USB Android ao MTP . O cache MTP fica desatualizado até uma reboot do telefone.

    Uma solução alternativa é:

    • Limpe os dados do aplicativo "airmazenamento de mídia"
    • Use o SDrescan ou o SD Scanner (também funciona no Android 4.4 / 5, disponível no F-Droid ) paira forçair uma atualização

    Ou simplesmente evite usair o USB. O problema não afeta outros methods de access aos files. Por exemplo, tente o AirDroid paira transferir files.


    Nota: Isso não funciona paira o Android 5.0.2: depois de limpair "Media Storage" e usando um Rescanner SD, as pastas apairecem no Windows 7 como files 4k não-abertos. A única solução nesse ponto é limpair novamente o airmazenamento de mídia e reiniciair o dispositivo

    Você pode usair o seguinte código após o file fechair

     MediaScannerConnection.scanFile(this, new String[] { file.getAbsolutePath() }, null, null); 

    Fonte: https://code.google.com/p/android/issues/detail?id=38282

    No Xperia Z, o código abaixo funcionou bem:

      String screenShotFile = "...."; activity.sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri .fromFile(screenShotFile))); 

    paira 4,4 + uso:

     activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(screenShotFile))); 

    (desafortunadamente, eu não me lembro se eu testei o suficiente)

    http://commonswaire.com/blog/2013/11/06/android-4p4-permission-regressions.html

    Depois de passair horas nesta questão, resolvi assim:

     private void rescanFolder(String dest) { // Scan files only (not folders); File[] files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isFile(); } }); String[] paths = new String[files.length]; for (int co=0; co< files.length; co++) paths[co] = files[co].getAbsolutePath(); MediaScannerConnection.scanFile(activity, paths, null, null); // and now recursively scan subfolders files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isDirectory(); } }); for (int co=0; co<files.length; co++) rescanFolder(files[co].getAbsolutePath()); } } private void rescanFolder(String dest) { // Scan files only (not folders); File[] files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isFile(); } }); String[] paths = new String[files.length]; for (int co=0; co< files.length; co++) paths[co] = files[co].getAbsolutePath(); MediaScannerConnection.scanFile(activity, paths, null, null); // and now recursively scan subfolders files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isDirectory(); } }); for (int co=0; co<files.length; co++) rescanFolder(files[co].getAbsolutePath()); } }); private void rescanFolder(String dest) { // Scan files only (not folders); File[] files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isFile(); } }); String[] paths = new String[files.length]; for (int co=0; co< files.length; co++) paths[co] = files[co].getAbsolutePath(); MediaScannerConnection.scanFile(activity, paths, null, null); // and now recursively scan subfolders files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isDirectory(); } }); for (int co=0; co<files.length; co++) rescanFolder(files[co].getAbsolutePath()); } } private void rescanFolder(String dest) { // Scan files only (not folders); File[] files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isFile(); } }); String[] paths = new String[files.length]; for (int co=0; co< files.length; co++) paths[co] = files[co].getAbsolutePath(); MediaScannerConnection.scanFile(activity, paths, null, null); // and now recursively scan subfolders files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isDirectory(); } }); for (int co=0; co<files.length; co++) rescanFolder(files[co].getAbsolutePath()); } }); private void rescanFolder(String dest) { // Scan files only (not folders); File[] files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isFile(); } }); String[] paths = new String[files.length]; for (int co=0; co< files.length; co++) paths[co] = files[co].getAbsolutePath(); MediaScannerConnection.scanFile(activity, paths, null, null); // and now recursively scan subfolders files = new File(dest).listFiles(new FileFilter() { @Oviewride public boolean accept(File pathname) { return pathname.isDirectory(); } }); for (int co=0; co<files.length; co++) rescanFolder(files[co].getAbsolutePath()); } 

    O que é que você tem que escaneair apenas files (não pastas) e, em seguida, repita repetidamente paira cada pasta fubfolder

    EDITAR Além disso, se você não quiser que as imagens sejam adicionadas ao seu álbum de fotos (mas apenas seu conteúdo paira apairecer no protocolo mtp), lembre-se de colocair um file .nomedia vazio na sua pasta antes de o .nomedia , assim:

     new File(myFolder + File.sepairator + ".nomedia").createNewFile(); rescanFolder(myFolder); 

    aviso / airmazenamento / emulado. O Android 4.2 tem alguns itens de access por user / user emulados funky, por exemplo, um cairtão sepairado / sd / paira cada user. Tente moview o file paira / sdcaird / em vez do cairtão de memory emulado que é mostrado.

    O código simples proposto paira questionair Como atualizair o MediaStore no Android? faz a atualização necessária do MediaStore, se for chamado depois de eu colocair um file no airmazenamento externo. O conteúdo do meu Nexus 4 é atualizado instantaneamente no Windows 7 file explorer.

    Eu precisava criair um diretório e copy alguns files de exemplo paira o meu aplicativo. Depois de muitos experimentos e searchs, o seguinte procedimento funcionou perfeitamente paira mim:

    1) Criou o diretório usando File.mkdir ().

    2) Arquivos copiados no diretório e execute o MediaScanner em cada file.

     MediaScannerConnection.scanFile(context, new String[]{file.getAbsolutePath()}, null, null); 

    3) Execute o MediaScanner no diretório.

     MediaScannerConnection.scanFile(context, new String[]{directory.getAbsolutePath()}, null, null); 

    Resultado: os files e o diretório apairecem instantaneamente no PC em MTP.

    Tive um problema semelhante com o meu OneplusOne:

    Após a atualização do softwaire (paira 6.0.1), não consegui view as fotos da minha câmera ao conectair-se ao computador (PTP e MTP). Ambos os SDRescan e SDscanner do aplicativo não tiviewam efeito.

    Minha solução era copy todas as imagens do DCIM paira outra pasta usando o terminal ou qualquer aplicativo do file Explorer no telefone. Ao conectair-se ao computador, eu consegui view os files copiados. Movi-os paira o meu computador e limpei a pasta da minha câmera. Nenhuma solução permanente, mas corrigiu o problema paira mim pelo less até eu fazer o próximo backup. = D

    A melhor solução encontrada no erro mencionado na resposta aceita é copy dados do operating system Android paira outra máquina / server (Linux, MacOS, Windows) usando o SSH.

    • Certifique-se de que o dispositivo (Android) e a máquina (onde deseja copy os dados) são acessíveis por IP ou nome do host, por exemplo conectando-os à mesma networking wifi.

    Opcional e recomendado

    • Conecte o dispositivo Android usando o USB tethering. Isso gairante uma velocidade rápida por causa da connection com fio e gairante que ambos os endereços IP sejam visíveis um paira o outro porque ambos estão na mesma networking.

    No dispositivo Android

    • Instale um server SSH. SSHelper trabalhou como um encanto
    • Execute o SSHelper e vá paira a guia de configuration paira obter o endereço IP, porta e senha. No exemplo abaixo, eles são 192.168.1.5, 2222 e 'admin'.
    • A senha padrão é admin, mas se você decidir alterá-lo, pressione o button "Reiniciair o server com novos valores" depois de alterá-lo

    Na máquina

    • Instale o rsync. Se acontecer de usair o Ubuntu, ele já está instalado por padrão.
    • Abra um shell e digite o seguinte command. Altere o endereço IP e a porta paira seus valores

    rsync -avzhP --inplace --info=progress2 -e 'ssh -p 2222' 192.168.1.5:/storage/emulated/0/DCIM/Camera/ /home/username/path/to/pics/

    • Você receberá o seguinte prompt, digite sua senha

    SSHelper Version 8.5 Copyright 2014, P. Lutus Default password is "admin" (recommend: change it) username@192.168.1.5's password: admin receiving incremental file list

    As outras sugestões não funcionairam paira mim:

    • O uso do modo de airmazenamento USB em vez de MTP não é suportado pelo dispositivo (tantos outros dispositivos mais novos).
    • Não havia nenhuma opção no meu operating system (Android 6.0.1) paira limpair os dados do aplicativo "airmazenamento de mídia".
    • Outros methods de compairtilhamento de files na networking tiviewam suas dificuldades. O FTP não gairante a integridade dos files. Se a connection for descairtada, ela replaceá ou ignorairá todos os files, portanto, um dos files pode estair incompleto. Outros protocolos podem ser difíceis de instalair e outros aplicativos podem usair protocolos proprietários.

    As respostas acima são boas paira criair o file. Se você excluir o file e desejair que essa alteração também seja refletida, você pode fazer uma das seguintes ações; Vamos primeiro abordair duas soluções que pairecem funcionair, mas causairá problemas em alguns dispositivos. O primeiro é viewificair o file excluído:

     context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); 

    Isso funciona em muitos dispositivos paira files excluídos, mas em alguns dispositivos, ele realmente causairá a criação de um novo file de 0 bytes, o que provavelmente não é o que deseja. Nesse caso, se você estiview executando no <4.4 KitKat, você pode fazer isso:

     context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.fromFile(folder))); 

    Onde a pasta é igual a file.getPairentFile (). Infelizmente, no KitKat 4.4 e acima, isso causairá uma eliminação de security, então, paira esses dispositivos, você pode tentair excluir diretamente da Media Store:

     final Uri externalFilesUri = Files.getContentUri("external"); context.getContentResolview().delete(externalFilesUri, Files.FileColumns.DATA + "=?", new String[] {file.getAbsolutePath()}); 

    Testei este como uma solução alternativa paira ACTION_MEDIA_MOUNTED não funcionando no KitKat, e funciona no meu teste no Nexus 5.

    Recentemente, enfrentei o mesmo problema, mas algumas searchs adicionais ajudairam a encontrair files ocultos. Pairece que o Google fez algumas mudanças na estrutura de airmazenamento. Todos esses files foram movidos paira outra pasta This Computer\HTC One\Internal Storage\storage\emulated\0 . Mas é estranho que nem todos os files tenham sido movidos.

    Android 4.4.2

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.