android - Android ACTION_SEND (MULTIPLE) Intent 不会将文件发送到 Google Drive
问题描述
我有图片保存为文件。然后我尝试分享它们。
它适用于所有 Messenger 应用程序,但不适用于 Google 驱动器。我收到来自 Google 云端硬盘的通知错误。
首先,在共享弹出窗口中选择 Google drive 后,我可以选择 Folder。这意味着 Google 驱动器可以看到我的文件(或者可能只是名称?)。
之后,我立即收到来自 Google 驱动器的错误通知,说“上传错误,无法计划上传 2 个文件”(或我选择的其他文件数)。
意图创建方法:
@NotNull
private Intent initIntent() {
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/jpg");
intent.putExtra(Intent.EXTRA_SUBJECT, "Pictures");
intent.putExtra(Intent.EXTRA_TEXT, "Pictures share");
return intent;
}
尝试发送一个(使用 ACTION_SEND_MULTIPLE 或使用 ACTION_SEND),尝试添加不同的 EXTRA_SUBJECT、EXTRA_TEXT、EXTRA_MAIL,将 EXTRA_TEXT 添加为 ArrayList(使用 intent.putCharSequenceArrayListExtra)。尝试将不同的标志添加到意图作为 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。没有任何帮助。
意图方法的额外图片:
private void addPicturesExtra(Intent intent) {
ArrayList<Uri> uris = new ArrayList<>(pictures.size());
for (PicturePresentation picture : pictures) {
File picFile = new File(picture.getPath());
Uri uri = Uri.fromFile(picFile);
uris.add(uri);
}
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
}
正如我之前所说,尝试使用一个 Uri(图片文件路径)和 ArrayList 作为额外意图的参数和一个 Uri 对象。
意图启动方法:
private void startIntent(Intent intent) {
try {
activity.startActivity(Intent.createChooser(intent, "Send"));
} catch (Exception ex) {
ExceptionHandler.handle(ex);
}
}
尝试使用或不使用选择器启动它。它没有帮助。很奇怪,它适用于所有其他应用程序,但不适用于 Google 驱动器。
您可以在下面找到尝试将图片上传到 Google 驱动器时 Logcat 的堆栈跟踪。
2020-10-15 15:47:49.871 V/FA: Activity resumed, time: 1113377792
2020-10-15 15:47:49.890 V/FA: Connecting to remote service
2020-10-15 15:47:49.899 D/FA: Connected to remote service
2020-10-15 15:47:49.900 V/FA: Processing queued up service tasks: 1
2020-10-15 15:47:54.904 V/FA: Inactivity, disconnecting from the service
2020-10-15 15:47:54.905 W/ConnectionTracker: Exception thrown while unbinding
java.lang.IllegalArgumentException: Service not registered: com.google.android.gms.measurement.internal.zzji@6e14ca2
at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1759)
at android.app.ContextImpl.unbindService(ContextImpl.java:1786)
at android.content.ContextWrapper.unbindService(ContextWrapper.java:751)
at com.google.android.gms.common.stats.ConnectionTracker.zza(com.google.android.gms:play-services-basement@@17.3.0:55)
at com.google.android.gms.common.stats.ConnectionTracker.unbindService(com.google.android.gms:play-services-basement@@17.3.0:50)
at com.google.android.gms.measurement.internal.zzio.zzag(com.google.android.gms:play-services-measurement-impl@@17.6.0:245)
at com.google.android.gms.measurement.internal.zzio.zzal(com.google.android.gms:play-services-measurement-impl@@17.6.0:262)
at com.google.android.gms.measurement.internal.zzio.zzc(com.google.android.gms:play-services-measurement-impl@@17.6.0:336)
at com.google.android.gms.measurement.internal.zzir.zza(com.google.android.gms:play-services-measurement-impl@@17.6.0:2)
at com.google.android.gms.measurement.internal.zzai.run(com.google.android.gms:play-services-measurement-impl@@17.6.0:7)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.google.android.gms.measurement.internal.zzfs.run(com.google.android.gms:play-services-measurement-impl@@17.6.0:21)
我唯一的例外是 IllegalArgumentException,我认为它来自 GoogleAnalytics。无论如何,我认为这与我面临的问题无关。(我在其他一些情况下也有)
我错过了一些明显的东西还是只是谷歌驱动器的错误?将不胜感激任何帮助!
解决方案
感谢 CommonsWare,我解决了这个问题!
所以,首先,我们需要使用
Uri uri = FileProvider.getUriForFile(context, "com.test", picFile)
代替
Uri uri = Uri.fromFile(picFile);
因此 FileProvider 会为我们的文件生成特殊的 Uri,路径前带有“content://”。
然后我们需要在 App 清单中声明我们的 FileProvider。
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.test.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
以及带有路径的附加文件
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
name="pics"
path="pics/" />
<external-files-path
name="pdf"
path="pdf/" />
</paths>
推荐阅读
- react-native - 在弹出警报中集成倒数计时器 React native
- python - 为什么我收到索引错误异常错误?
- wso2 - WSO2 Identity Server 5.8 - SAML2 Web SSO:浏览器兼容性
- rust - 在 rust doc 注释中显示矩阵
- c# - 如何使用带有 Newtonsoft.Json 的对象从 API 获取所有数据,我在 xamarin c# 中收到错误的数据
- python - 在 python 中评估变量赋值语句时的语法错误
- javascript - Reactjs-我不断收到错误:TypeError:company.map 不是函数
- pine-script - 如何在 pine 脚本中将 timeframe.period 作为整数返回?
- html - 如何从网页深层链接到 Microsoft Teams 通话
- reactjs - 当我在松露中运行 npm run start 时,我遇到了这种类型的错误