我试图在我的Xamarin Android应用中打开自定义文件,但是当我打开它时,我无法正确获取文件扩展名,甚至无法获取文件名。我尝试使用OneDrive,它可以正常工作但不适用于Google云端硬盘甚至是下载应用。
这是我的AndroidManifest:
<application android:allowTaskReparenting="true" ...>
<activity android:launchMode="singleTask" ...>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content" android:mimeType="application/octet-stream" android:pathPattern=".*\\.pec" />
<data android:scheme="content" android:mimeType="application/*" android:pathPattern=".*\\.pec" />
<data android:scheme="content" android:mimeType="*/*" android:pathPattern=".*\\.pec" />
</intent-filter>
...
</activity>
</application>
我在OnNewIntent方法中得到了Intent,因为我使用SingleTask作为LaunchMode。所以我的代码就是这样:
protected override void OnNewIntent(Intent intent)
{
string action = intent.Action;
string type = intent.Type;
AN.Uri fileUri = intent.Data;
string filename = fileUri.LastPathSegment;
}
这就是我作为fileUri和文件名获得的。
来自OneDrive: 内容://com.microsoft.skydrive.content.external/Drive/ID/1/Item/RID/8E63BB6D425F77DA%217395/Stream/1/Property/kn.pec
来自Google云端硬盘: 内容://com.google.android.apps.docs.storage.legacy/enc%3DLU5kldI4Leii_fQEr6niunAH6hjV_WGJrQZDf64TSRRqnyqi
来自下载: 内容://com.android.providers.downloads.documents/document/4169
答案 0 :(得分:0)
这就是我能够从Android上的下载和Google驱动器获取文件名的方法:
internal static bool TryGetFileNameFromUri(Android.Net.Uri uri, out string displayName)
{
var result = false;
displayName = default;
var resolver = MainActivity.Instance.ContentResolver;
if (uri.ToString().StartsWith("content://"))
{
Android.Database.ICursor cursor = null;
try
{
cursor = resolver.Query(uri, null, null, null, null);
if (cursor != null && cursor.MoveToFirst())
{
displayName = cursor.GetString(cursor.GetColumnIndex(OpenableColumns.DisplayName));
result = true;
}
}
finally
{
cursor.Close();
}
}
return result;
}