Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9293

眺めて覚える C# Xamarin Forms(13) File 操作

$
0
0

Android上の任意のファイルアクセスするときにユーザーの許可が必要です。

主なAndroidのファイルディレクトリ

Android.OS.Environmentディレクトリ
DirectoryAlarmsPRIVATE_EXTERNAL_STORAGE/Alarms
DirectoryDcimPRIVATE_EXTERNAL_STORAGE/DCIM
DirectoryDownloadsPRIVATE_EXTERNAL_STORAGE/Download
DirectoryDocumentsPRIVATE_EXTERNAL_STORAGE/Documents
DirectoryMoviesPRIVATE_EXTERNAL_STORAGE/Movies
DirectoryMusicPRIVATE_EXTERNAL_STORAGE/Music
DirectoryNotificationsPRIVATE_EXTERNAL_STORAGE/Notifications
DirectoryPodcastsPRIVATE_EXTERNAL_STORAGE/Podcasts
DirectoryRingtonesPRIVATE_EXTERNAL_STORAGE/Ringtones
DirectoryPicturesPRIVATE_EXTERNAL_STORAGE/Pictures

image.png

許可なしでアクセスすると下記のメッセージを出し例外として扱われます。

image.png

手順1 Xamarin formsのプロジェクトを作成します。

手順2 andoridプロジェクトのプロパティを開きます。

image.png

手順3 ファイルアクセスするためには、android マニフェストを開いて、必要なアクセス許可を与えます。

image.png
image.png
AndroidManifest.xmlにて確認します。
image.png

手順4 参照にMono.Abdroid.dllを追加します。

image.png

手順5MainActivity.csに許可ダイアログ要求を追加します。

MainActivity.cs
usingSystem;usingAndroid.App;usingAndroid.Content.PM;usingAndroid.Runtime;usingAndroid.Views;usingAndroid.Widget;usingAndroid.OS;usingAndroid.Support.V4.App;usingAndroid.Support.V4.Content;usingAndroid;namespacePCLFiles.Droid{[Activity(Label="PCLFiles",Icon="@mipmap/icon",Theme="@style/MainTheme",MainLauncher=true,ConfigurationChanges=ConfigChanges.ScreenSize|ConfigChanges.Orientation)]publicclassMainActivity:global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity{protectedoverridevoidOnCreate(BundlesavedInstanceState){TabLayoutResource=Resource.Layout.Tabbar;ToolbarResource=Resource.Layout.Toolbar;base.OnCreate(savedInstanceState);       //追加します。if(ContextCompat.CheckSelfPermission(this,Manifest.Permission.ReadExternalStorage)!=(int)Permission.Granted){ActivityCompat.RequestPermissions(this,newstring[]{Manifest.Permission.ReadExternalStorage},0);}if(ContextCompat.CheckSelfPermission(this,Manifest.Permission.WriteExternalStorage)!=(int)Permission.Granted){ActivityCompat.RequestPermissions(this,newstring[]{Manifest.Permission.WriteExternalStorage},0);}Xamarin.Essentials.Platform.Init(this,savedInstanceState);global::Xamarin.Forms.Forms.Init(this,savedInstanceState);LoadApplication(newApp());}publicoverridevoidOnRequestPermissionsResult(intrequestCode,string[]permissions,[GeneratedEnum]Android.Content.PM.Permission[]grantResults){Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);base.OnRequestPermissionsResult(requestCode,permissions,grantResults);}}}

image.png

手順6 MainPage.xamlにスタートボタンを設定します。

MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?><ContentPagexmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:d="http://xamarin.com/schemas/2014/forms/design"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"x:Class="PCLFiles.MainPage"><StackLayout><!-- Place new controls here --><LabelText="Welcome to Xamarin.Forms!"HorizontalOptions="Center"/><ButtonText="Start"Clicked="SetUp"/></StackLayout></ContentPage>

手順7 ライブラリを追加しMainPage.xaml.csにファイル読み込み部を追加します。

image.png

MainPage.xaml.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingXamarin.Forms;usingAndroid.OS;usingSystem.IO;usingAndroid.Support.V4.App;usingAndroid.Support.V4.Content;usingAndroid;namespacePCLFiles{publicclassCam{publicstringName{get;set;}publicstringImage{get;set;}}// Learn more about making custom code visible in the Xamarin.Forms previewer// by visiting https://aka.ms/xamarinforms-previewer[DesignTimeVisible(false)]publicpartialclassMainPage:ContentPage{publicMainPage(){InitializeComponent();}privatevoidSetUp(objects,EventArgse){vartmp=newDataTemplate(()=>{vargrid=newGrid(){Margin=2};grid.ColumnDefinitions.Add(newColumnDefinition{Width=newGridLength(100)});grid.ColumnDefinitions.Add(newColumnDefinition{Width=newGridLength(1,GridUnitType.Auto)});varname=newLabel{FontSize=16};name.SetBinding(Label.TextProperty,"Name");varimage=newImage(){HeightRequest=200};image.SetBinding(Image.SourceProperty,"Image");grid.Children.Add(image,0,0);grid.Children.Add(name,1,0);returnnewViewCell{View=grid};});varpath=Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim).Path+"/Camera";varlst=fromxinDirectory.GetFiles(path).Take(10)selectnewCam(){Name=Path.GetFileName(x),Image=x};varlv=newListView(){ItemsSource=lst,ItemTemplate=tmp};Content=newXamarin.Forms.ScrollView(){Margin=2,Orientation=ScrollOrientation.Vertical,Content=lv};}}}

手順8 実行する。

image.png

付録

nugetで追加したライブラリ

image.png


Viewing all articles
Browse latest Browse all 9293

Trending Articles