1.AndroidManifest.xml中增加权限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.mobile" android:installLocation="auto"> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" /> <!--<application android:label="Mobile.Android" android:theme="@style/MainTheme" android:usesCleartextTraffic="true"></application>--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:label="Mobile.Android" android:icon="@mipmap/launcher_foreground" android:extractNativeLibs="true" android:requestLegacyExternalStorage="true"/> </manifest>
2.Mobile.Android的MainActivity.cs增加粗体权限申请代码
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { int requestPermissions = 0; string cameraPermission = Android.Manifest.Permission.Camera; string filePermission = Android.Manifest.Permission.WriteExternalStorage; if (!(ContextCompat.CheckSelfPermission(this, cameraPermission) == (int)Permission.Granted) || !(ContextCompat.CheckSelfPermission(this, filePermission) == (int)Permission.Granted)) { ActivityCompat.RequestPermissions(this, new String[] { cameraPermission, filePermission }, requestPermissions); } Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); }
3.后端
private async void Button_OnClicked(object sender, EventArgs e) { var pickFile = await CrossFilePicker.Current.PickFile(); if (pickFile is null) { // 用户拒绝选择文件 } else { FileText.Text = $@"选取文件路径 :{pickFile.FileName}"; var file = pickFile.GetStream();//File.ReadAllBytes(pickFile.FilePath); } }
4.前端
<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Mobile.Views.NewItemPage" Shell.PresentationMode="Animated" Title="New Item" xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core" ios:Page.UseSafeArea="true"> <ContentPage.Content> <StackLayout Spacing="3" Padding="15"> <Label Text="Text" FontSize="Medium" /> <Entry Text="{Binding Text, Mode=TwoWay}" FontSize="Medium" /> <Label Text="Description" FontSize="Medium" /> <Editor Text="{Binding Description, Mode=TwoWay}" AutoSize="TextChanges" FontSize="Medium" Margin="0" /> <StackLayout Orientation="Horizontal"> <Button Text="Cancel" Command="{Binding CancelCommand}" HorizontalOptions="FillAndExpand"></Button> <Button Text="Save" Command="{Binding SaveCommand}" HorizontalOptions="FillAndExpand"></Button> <Label x:Name="FileText" Margin="10,10,10,10"></Label> <Button HorizontalOptions="Center" Text="选取文件" Clicked="Button_OnClicked"></Button> </StackLayout> </StackLayout> </ContentPage.Content> </ContentPage>
搞定~