2017-10-08 154 views
0

問題1:我已經存儲在共享文件Fileprovider

Environment.getExternalStorageDirectory() --> /storage/emulated/0/appname/downloads/sample.pdf 

一個pdf我用正常的方式將其發送如下所示:

File iconsStoragePath = Environment.getExternalStorageDirectory(); 
final String selpath = iconsStoragePath.getAbsolutePath() + "/appname/downloads/"; 

Intent intent = new Intent(Intent.ACTION_SEND); 
Uri selectedUri = Uri.parse(selpath + "/" + item.getFilename()); 
String fileExtension = MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString()); 
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension); 
intent.setType(mimeType); 
intent.putExtra(Intent.EXTRA_STREAM, selectedUri); 
startActivity(Intent.createChooser(intent, "Share File")); 

現在的結果是

enter image description here

問題是文件正在共享沒有文件名。

問題2:當我試圖使用文件提供的PDF不會共享給我一個錯誤:

Unable to share. Please try again

Environment.getFilesDir() --> /data/data/com.myapp.name/files/myapp/downloads/sample.pdf 

清單文件:

<application> 
<provider 
      android:name="android.support.v4.content.FileProvider" 
      android:authorities="${applicationId}.fileprovider" 
      android:exported="false" 
      android:grantUriPermissions="true"> 
      <meta-data 
       android:name="android.support.FILE_PROVIDER_PATHS" 
       android:resource="@xml/nnf_provider_paths" /> 
     </provider> 
</application> 

XML/nnf_provider_paths .xml

<?xml version="1.0" encoding="utf-8"?> 
<files-path 
    name="root" 
    path="myapp/downloads" /> 

代碼:

File path = new File(getFilesDir(), "downloads"); 
File file = new File(documentsPath + "/" + filename); 
        Uri contentUri = FileProvider.getUriForFile(getApplicationContext(), AUTHORITY, file); 
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.putExtra(Intent.EXTRA_STREAM, contentUri); 
intent.setType("application/pdf"); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
startActivity(intent); 

哪種方法更好?

回答

0

我個人比較喜歡#2。瞭解如何使用ShareCompat創建ShareIntents

關於你的問題的辦法#2 this文章,我想你錯過了.setData.setDataAndUri

這是一個示例代碼段這對我來說適用於通過共享圖像FileProviders

public static void shareImage(Activity context) { 

    Log.d(TAG, "initializing share image"); 
    File imgPath = new File(context.getCacheDir(), DEFAULT_TEMP_DIR_NAME); 
    File newFile = new File(imgPath, DEFAULT_TEMP_FILENAME); 
    String authority = context.getPackageName() + ".fileprovider"; 
    Log.d(TAG, "authority: " + authority); 
    Uri contentUri = FileProvider.getUriForFile(context, authority, newFile); 

    if (contentUri != null) { 
     Intent shareIntent = ShareCompat.IntentBuilder.from(context) 
       .setType("image/png") 
       .setStream(contentUri) 
       .setSubject(context.getString(R.string.share_subject)) 
       .setText(context.getString(R.string.share_message)) 
       .setEmailTo(new String[]{"[email protected]"}) 
       .getIntent(); 
     shareIntent.setData(contentUri); 
     shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     context.startActivity(Intent.createChooser(
       shareIntent, context.getString(R.string.share_chooser_title))); 
    } 
}