質問するログイン新規登録

質問編集履歴

6

説明とタイトル追加

2020/11/19 01:11

投稿

TAKE_SS
TAKE_SS

スコア40

title CHANGED
File without changes
body CHANGED
@@ -4,6 +4,7 @@
4
4
  アプリからファイルの出力(書き込み)を行いたい
5
5
 
6
6
  権限を取得して書き込みを行う処理を作ってみたが、ファイルに書き込みされないのです(リードは出来ます)
7
+ Windows10でUSB接続して「PC\HUAWEI MediaPad M3 Lite 10\内部ストレージ\Documents」にあるファイルを見ても更新されていないと判断しました。
7
8
 
8
9
  根本的に何か間違っているのでしょうか
9
10
  単に環境の問題でしょうか

5

試したこと追加

2020/11/19 01:11

投稿

TAKE_SS
TAKE_SS

スコア40

title CHANGED
@@ -1,1 +1,1 @@
1
- Androidの外部ストレージへのファイル書き込みが出来ない
1
+ Androidの外部ストレージへのファイル書き込みが出来ない(Windowsから見るとNG??)
body CHANGED
@@ -129,7 +129,9 @@
129
129
 
130
130
  ### 試したこと
131
131
  ・ファイル読込(System.IO.File.ReadLines) 問題なし
132
- ・ファイル書込(System.IO.File.WriteAllText) 書き込みできない
132
+ ・ファイル書込(System.IO.File.WriteAllText) Windowから確認すると書き込みできない
133
+ ・書き込み後に同じファイルを読み込むと、書いた内容が読み込めた
134
+ ・実は書き込めているが、Android上とWindows10上では認識が違う?
133
135
 
134
136
  ### 環境
135
137
  android : Android7.0(HUAWEI MediaPad M3 Lite 10)

4

タイトル変更

2020/11/19 01:09

投稿

TAKE_SS
TAKE_SS

スコア40

title CHANGED
@@ -1,1 +1,1 @@
1
- Androidの外部ストレージへのアクセス許可(ファイル操作)
1
+ Androidの外部ストレージへのファイル書き込みが出来ない
body CHANGED
File without changes

3

ソースの追加と状況整理

2020/11/17 05:49

投稿

TAKE_SS
TAKE_SS

スコア40

title CHANGED
File without changes
body CHANGED
@@ -1,34 +1,136 @@
1
1
  ### やりたいこと・現状
2
- Android外部ストレージ(/storage/emulated/0/Documents/ など)に、ファイルをコピー(WindowsPCに接続した後コピー)したファイルに対して編集が出来ない
2
+ xamarin.Androidで、外部ストレージ(例えば/storage/emulated/0/Documents/)に、ファイルをコピー(WindowsPCに接続した後コピー)したファイルに対して編集が出来ない
3
3
  (PCからのコピー・読取りは可能)
4
- アプリからファイルの出力(書き込み)を行いたい
4
+ アプリからファイルの出力(書き込み)を行いたい
5
5
 
6
- ファイル書込処理を試したところ、関数の応答でエラーになっていないのにファイル書き込みが出来ていない
6
+ 権限を取得してみを行う処理をってみたが、ファイル書き込みされないのです(リードは出来ます)
7
- WindowsPCからアクセスすると、ファイルのコピーや削除は出来るが、上書きなどの編集が出来ない
8
7
 
8
+ 根本的に何か間違っているのでしょうか
9
+ 単に環境の問題でしょうか
10
+ 何か分かる方がいたら教えていただきたいです
11
+
12
+ ```C#
13
+ using System;
14
+ using System.IO;
15
+ using System.Linq;
16
+ using System.Text;
17
+ using Android;
18
+ using Android.App;
19
+ using Android.Content.PM;
20
+ using Android.OS;
21
+ using Android.Runtime;
9
- 何かAndroid側の設定か、アプリでの許可設定などする事でファイル書き込みする事は出来ないでしょうか(又は、処理出来るAPIはないでしょうか)
22
+ using Android.Support.Design.Widget;
10
- (xamarin等WindowsがNGということもあるのか?)
23
+ using Android.Support.V4.App;
24
+ using Android.Support.V4.Content;
25
+ using Android.Support.V7.App;
26
+ using Android.Views;
27
+ using Android.Widget;
28
+
29
+ namespace RcvWriteTest1
30
+ {
31
+ [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
32
+ public class MainActivity : AppCompatActivity
33
+ {
34
+ protected override void OnCreate(Bundle savedInstanceState)
35
+ {
36
+ base.OnCreate(savedInstanceState);
37
+ Xamarin.Essentials.Platform.Init(this, savedInstanceState);
38
+ SetContentView(Resource.Layout.activity_main);
39
+
40
+ Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
41
+ SetSupportActionBar(toolbar);
42
+
43
+ Button btnEnd = (Button)FindViewById(Resource.Id.button2);
44
+ btnEnd.Click += BtnEnd_Click;
45
+ Button btnWrite = (Button)FindViewById(Resource.Id.button1);
46
+ btnWrite.Click += BtnWrite_Click;
47
+ }
48
+
49
+ public override bool OnCreateOptionsMenu(IMenu menu)
50
+ {
51
+ MenuInflater.Inflate(Resource.Menu.menu_main, menu);
52
+ return true;
53
+ }
54
+
55
+ public override bool OnOptionsItemSelected(IMenuItem item)
56
+ {
57
+ int id = item.ItemId;
58
+ if (id == Resource.Id.action_settings)
59
+ {
60
+ return true;
61
+ }
62
+
63
+ return base.OnOptionsItemSelected(item);
64
+ }
65
+
66
+ private void FabOnClick(object sender, EventArgs eventArgs)
67
+ {
68
+ View view = (View) sender;
69
+ Snackbar.Make(view, "Replace with your own action", Snackbar.LengthLong)
70
+ .SetAction("Action", (Android.Views.View.IOnClickListener)null).Show();
71
+ }
72
+
73
+ private void BtnEnd_Click(object sender, EventArgs e)
74
+ {
75
+ this.FinishAndRemoveTask(); // アプリケーションの終了
76
+ // アプリの強制終了させる
77
+ System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();
78
+ }
79
+ private void BtnWrite_Click(object sender, EventArgs e)
80
+ {
81
+ // 書き込み権限確認
82
+ var permissioncheckW = ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage);
83
+ // 書き込み権限がない場合はリクエストする
84
+ if(permissioncheckW == Android.Content.PM.Permission.Denied)
85
+ {
86
+ ActivityCompat.RequestPermissions(this, new []
87
+ {
88
+ Manifest.Permission.WriteExternalStorage
89
+ }, 0);
90
+ }
91
+ string strbase = Android.OS.Environment.ExternalStorageDirectory + "/Documents/";
92
+ string path = Path.Combine(strbase, "TEST.txt");
93
+ string path2 = Path.Combine(strbase, "TEST.CSV");
94
+
95
+ //FileInfo file = new FileInfo(path);
96
+ var Lines = System.IO.File.ReadAllLines(path2, Encoding.GetEncoding("shift-jis"));
97
+
98
+ // ***** ここで書き込みを行ってみるが、TEST.txtにはなにも書き込まれていない... *****
99
+ try
100
+ {
101
+ System.IO.File.WriteAllText(path, "TEST\n");
102
+ }
103
+ catch(Exception ex)
104
+ {
105
+ Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
106
+ }
107
+
108
+ }
109
+ public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
110
+ {
111
+ Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
112
+ // 要求して権限がすべて許可された場合にダイアログを表示
113
+ if (grantResults.Cast<Permission>().All(x => x == Permission.Granted))
114
+ {
115
+ new Android.App.AlertDialog.Builder(this)
116
+ .SetTitle("Runtime Permission")
117
+ .SetMessage("All Granted")
118
+ .SetPositiveButton("OK", (_, __) => { })
119
+ .Show();
120
+ }
121
+ base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
122
+ }
123
+ }
124
+ }
125
+
126
+ ```
127
+ 上記の処理でファイル書込の処理を試したところ、特にエラーが発生していないようなのに(catch側に来ないのに)書き込みが出来ていない
11
128
  (別フォルダでも良いので自分で追加したファイルの入出力さえ出来れば良いのですが。。。)
12
129
 
13
130
  ### 試したこと
14
- ・ファイル読込(System.IO.File.ReadLines)
131
+ ・ファイル読込(System.IO.File.ReadLines) 問題なし
15
-  問題なし(正常にデータ読み込み可能)
16
- ・ファイル作成(System.IO.File.CreateText)
17
-  応答にエラーは無いが,ファイルが作成されていない
18
- ・ファイル書込(System.IO.File.WriteLine
132
+ ・ファイル書込(System.IO.File.WriteAllText 書き込みできない
19
-  応答にエラーは無いが,ファイルが書き込まれていない
20
- ・Android機器をPCに接続して、Windowsアプリ(メモ帳など)でアクセスして上書き保存不可(コピーや削除、詠み込みは可能)
21
- ・CheckSelfPermissionではリード・ライト共に許可(Granted)
22
- ・ExternalStorageStateでステータスを確認した結果、mounted
23
- ・MediaMountedReadOnly はfalse
24
- ・MediaMounted はtrue
25
133
 
26
- ### 試したこと(追加)
27
- ・Android端末をPCに接続し、Windowsのエクスプローラから操作
28
-  → 新規フォルダの作成は出来るが、ファイル作成が出来ない
29
-   コピーしたファイルをNotepad等で開いて上書きしようとしても出来ない
30
-  → プログラム云々の前に、Android側で制限があるようにみえる
31
-
32
134
  ### 環境
33
135
  android : Android7.0(HUAWEI MediaPad M3 Lite 10)
34
136
  PC   : Windows10 , Visualstudio2019(xamarin)

2

環境で案Androidの機種明記

2020/11/17 05:46

投稿

TAKE_SS
TAKE_SS

スコア40

title CHANGED
File without changes
body CHANGED
@@ -29,6 +29,6 @@
29
29
    コピーしたファイルをNotepad等で開いて上書きしようとしても出来ない
30
30
   → プログラム云々の前に、Android側で制限があるようにみえる
31
31
 
32
- 環境
32
+ ### 環境
33
- android : Android7.0
33
+ android : Android7.0(HUAWEI MediaPad M3 Lite 10)
34
34
  PC   : Windows10 , Visualstudio2019(xamarin)

1

試したこと追記

2020/08/12 08:10

投稿

TAKE_SS
TAKE_SS

スコア40

title CHANGED
File without changes
body CHANGED
@@ -23,6 +23,12 @@
23
23
  ・MediaMountedReadOnly はfalse
24
24
  ・MediaMounted はtrue
25
25
 
26
+ ### 試したこと(追加)
27
+ ・Android端末をPCに接続し、Windowsのエクスプローラから操作
28
+  → 新規フォルダの作成は出来るが、ファイル作成が出来ない
29
+   コピーしたファイルをNotepad等で開いて上書きしようとしても出来ない
30
+  → プログラム云々の前に、Android側で制限があるようにみえる
31
+
26
32
  環境
27
33
  android : Android7.0
28
34
  PC   : Windows10 , Visualstudio2019(xamarin)