質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

3121閲覧

Androidの外部ストレージへのファイル書き込みが出来ない(Windowsから見るとNG??)

TAKE_SS

総合スコア40

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2020/08/03 01:37

編集2020/11/19 01:11

やりたいこと・現状

xamarin.Androidで、外部ストレージ(例えば/storage/emulated/0/Documents/)に、ファイルをコピー(WindowsPCに接続した後コピー)したファイルに対して編集が出来ない
(PCからのコピー・読取りは可能)
アプリからファイルの出力(書き込み)を行いたい

権限を取得して書き込みを行う処理を作ってみたが、ファイルに書き込みされないのです(リードは出来ます)
Windows10でUSB接続して「PC\HUAWEI MediaPad M3 Lite 10\内部ストレージ\Documents」にあるファイルを見ても更新されていないと判断しました。

根本的に何か間違っているのでしょうか
単に環境の問題でしょうか
何か分かる方がいたら教えていただきたいです

C#

1using System; 2using System.IO; 3using System.Linq; 4using System.Text; 5using Android; 6using Android.App; 7using Android.Content.PM; 8using Android.OS; 9using Android.Runtime; 10using Android.Support.Design.Widget; 11using Android.Support.V4.App; 12using Android.Support.V4.Content; 13using Android.Support.V7.App; 14using Android.Views; 15using Android.Widget; 16 17namespace RcvWriteTest1 18{ 19 [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)] 20 public class MainActivity : AppCompatActivity 21 { 22 protected override void OnCreate(Bundle savedInstanceState) 23 { 24 base.OnCreate(savedInstanceState); 25 Xamarin.Essentials.Platform.Init(this, savedInstanceState); 26 SetContentView(Resource.Layout.activity_main); 27 28 Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); 29 SetSupportActionBar(toolbar); 30 31 Button btnEnd = (Button)FindViewById(Resource.Id.button2); 32 btnEnd.Click += BtnEnd_Click; 33 Button btnWrite = (Button)FindViewById(Resource.Id.button1); 34 btnWrite.Click += BtnWrite_Click; 35 } 36 37 public override bool OnCreateOptionsMenu(IMenu menu) 38 { 39 MenuInflater.Inflate(Resource.Menu.menu_main, menu); 40 return true; 41 } 42 43 public override bool OnOptionsItemSelected(IMenuItem item) 44 { 45 int id = item.ItemId; 46 if (id == Resource.Id.action_settings) 47 { 48 return true; 49 } 50 51 return base.OnOptionsItemSelected(item); 52 } 53 54 private void FabOnClick(object sender, EventArgs eventArgs) 55 { 56 View view = (View) sender; 57 Snackbar.Make(view, "Replace with your own action", Snackbar.LengthLong) 58 .SetAction("Action", (Android.Views.View.IOnClickListener)null).Show(); 59 } 60 61 private void BtnEnd_Click(object sender, EventArgs e) 62 { 63 this.FinishAndRemoveTask(); // アプリケーションの終了 64 // アプリの強制終了させる 65 System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow(); 66 } 67 private void BtnWrite_Click(object sender, EventArgs e) 68 { 69 // 書き込み権限確認 70 var permissioncheckW = ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage); 71 // 書き込み権限がない場合はリクエストする 72 if(permissioncheckW == Android.Content.PM.Permission.Denied) 73 { 74 ActivityCompat.RequestPermissions(this, new [] 75 { 76 Manifest.Permission.WriteExternalStorage 77 }, 0); 78 } 79 string strbase = Android.OS.Environment.ExternalStorageDirectory + "/Documents/"; 80 string path = Path.Combine(strbase, "TEST.txt"); 81 string path2 = Path.Combine(strbase, "TEST.CSV"); 82 83 //FileInfo file = new FileInfo(path); 84 var Lines = System.IO.File.ReadAllLines(path2, Encoding.GetEncoding("shift-jis")); 85 86 // ***** ここで書き込みを行ってみるが、TEST.txtにはなにも書き込まれていない... ***** 87 try 88 { 89 System.IO.File.WriteAllText(path, "TEST\n"); 90 } 91 catch(Exception ex) 92 { 93 Toast.MakeText(this, ex.Message, ToastLength.Short).Show(); 94 } 95 96 } 97 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) 98 { 99 Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); 100 // 要求して権限がすべて許可された場合にダイアログを表示 101 if (grantResults.Cast<Permission>().All(x => x == Permission.Granted)) 102 { 103 new Android.App.AlertDialog.Builder(this) 104 .SetTitle("Runtime Permission") 105 .SetMessage("All Granted") 106 .SetPositiveButton("OK", (_, __) => { }) 107 .Show(); 108 } 109 base.OnRequestPermissionsResult(requestCode, permissions, grantResults); 110 } 111 } 112} 113

上記の処理でファイル書込の処理を試したところ、特にエラーが発生していないようなのに(catch側に来ないのに)書き込みが出来ていない
(別フォルダでも良いので自分で追加したファイルの入出力さえ出来れば良いのですが。。。)

試したこと

・ファイル読込(System.IO.File.ReadLines) 問題なし
・ファイル書込(System.IO.File.WriteAllText) Windowから確認すると書き込みできない
・書き込み後に同じファイルを読み込むと、書いた内容が読み込めた
・実は書き込めているが、Android上とWindows10上では認識が違う?

環境

android : Android7.0(HUAWEI MediaPad M3 Lite 10)
PC   : Windows10 , Visualstudio2019(xamarin)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「編集が出来ない」が具体的にどう出来ないのか不明ですが、Androidで作成したファイルをPCで認識させるにはメディアスキャン(もしくは再起動)が必要です。
試しにスマホを再起動してからDocumentsフォルダを開いて見てください。
今まで作成したファイルが表示されたら、作成したファイルにメディアスキャンを行う様にしてください。

投稿2020/11/19 01:24

Wind

総合スコア442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TAKE_SS

2020/11/19 01:34

Windows上のエクスプローラからテキストにアクセスして確認していたのですが、Androidの再起動が必要ということが分かっていませんでした ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問