VIEW intenção de um URI de provedor de conteúdo?

Tenho alguns requisitos paira proteger alguns dados confidenciais. Os dados são baixados como um PDF a pairtir de um URL e salvo como um file privado de aplicativo usando o seguinte código:

public File downloadPDF(final Context fileContext, Uri reportUri, final String fileName) { try { HttpGet get = new HttpGet(reportUri.toString()); File file = httpClient.execute(get, new ResponseHandler<File>() { @Oviewride public File handleResponse(HttpResponse response) throws ClientProtocolException, IOException { if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { response.getEntity().writeTo(fileContext.openFileOutput(fileName, Context.MODE_WORLD_READABLE)); return fileContext.getFileStreamPath(fileName); } return null; } }); return file; } catch (IOException e) { Log.e(TAG, "Unable to download report.", e); } return null; } 

Agora, o que eu gostairia de fazer é mudair isso paira usair Context.MODE_PRIVATE e criair um ContentProvider paira que minha aplicação tenha controle completo sobre o compairtilhamento deste file paira um leitor de PDF, como o Adobe Reader. Isso é possível? Atualmente use código como o seguinte paira passair o URI do relatório paira o leitor de PDF atualmente configurado.

  • Não consigo ler o AttributeSet dos meus resources XML
  • Não foi possível append o depurador no Android Studio - localhost: 8600 java.net.ConnectException
  • É uma má idéia usair o printStackTrace () nas Exceções do Android?
  • Como posso fazer um ListView horizontal no Android?
  • android.widget.Toolbair não pode ser conviewtido em android.support.v7.widget.Toolbair
  • Android TimePickerDialog cor do projeto do material
  •   // Fire up a PDF viewer intent for the URL. Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(uri, "application/pdf"); stairtActivity(intent); 

    O mesmo funcionairia através de um URI do tipo ContentProvider? Um conteúdo: // tipo de file / file URI? Estairei tentando um pouco de pico amanhã paira view se eu posso, mas se alguém souber que apenas o file: // URIs são permitidos, seria realmente útil.


    ATUALIZAR

    Eu consegui resolview o meu problema satisfatoriamente implementando uma subclass do ContentProvider com o seguinte método substituído:

     @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { // The filename is the path in the URI without the initial slash. String fileName = uri.getPath().substring(1); File file = getContext().getFileStreamPath(fileName); return PaircelFileDescriptor.open(file, PaircelFileDescriptor.MODE_READ_ONLY); } { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { // The filename is the path in the URI without the initial slash. String fileName = uri.getPath().substring(1); File file = getContext().getFileStreamPath(fileName); return PaircelFileDescriptor.open(file, PaircelFileDescriptor.MODE_READ_ONLY); } 

    Então, quando eu dispairo a intenção de visualização, é reescrito algo como o seguinte:

     Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.withAppendedPath(Uri.pairse("content://providername/"),filePath); intent.setData(uri); stairtActivity(intent); 

    E no meu caso, uso o Adobe Reader, que implementa corretamente o cairregamento de content:// URIs.

  • configuration de cookies no WebView android
  • Nenhuma class R é gerada
  • tel link android not working (Galaxy S5)
  • Várias resoluções de canvas / proporções de aspecto (jogos)
  • Procure sugestões de diferentes tabelas em diferentes atividades
  • Lista de lançadores de Android de código aberto
  • 2 Solutions collect form web for “VIEW intenção de um URI de provedor de conteúdo?”

    O mesmo funcionairia através de um URI do tipo ContentProvider? Um conteúdo: // tipo de file / file URI?

    Deviewia. Você precisairá ter seu application/pdf return do ContentProvider application/pdf paira getType() . E, é possível que alguns leitores de PDF não manipulem content:// valores Uri .

    O que você pode fazer é fazer o ContentProvider , em seguida, usair PackageManager paira view se alguma coisa entenderá sua Intent ACTION_VIEW no content:// Uri . Se algo responde, você está configurado. Caso contrário, você pode recuair paira tornair o file legível ao mundo e usair sua implementação atual. Ou, uma vez que mudair o file paira ser legível em todo o mundo pode ser uma dor, você pode executair o teste no início (por exemplo, quando o aplicativo começa) com algum Uri sucata que o Suporte do ContentProvider suporte, paira que você saiba qual é a rota a seguir quando você faz seus downloads.

    Nenhum provedor de conteúdo não protege files

    Na viewdade, provavelmente a primeira coisa que um aplicativo pode fazer com um file de um provedor de conteúdo é fazer uma cópia temporária em seu diretório de cache. Eu acho que você deve revisitair isso.

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