質問編集履歴

6

説明とタイトル追加

2020/11/19 01:11

投稿

TAKE_SS
TAKE_SS

スコア40

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,8 @@
10
10
 
11
11
  権限を取得して書き込みを行う処理を作ってみたが、ファイルに書き込みされないのです(リードは出来ます)
12
12
 
13
+ Windows10でUSB接続して「PC\HUAWEI MediaPad M3 Lite 10\内部ストレージ\Documents」にあるファイルを見ても更新されていないと判断しました。
14
+
13
15
 
14
16
 
15
17
  根本的に何か間違っているのでしょうか

5

試したこと追加

2020/11/19 01:11

投稿

TAKE_SS
TAKE_SS

スコア40

test CHANGED
@@ -1 +1 @@
1
- Androidの外部ストレージへのファイル書き込みが出来ない
1
+ Androidの外部ストレージへのファイル書き込みが出来ない(Windowsから見るとNG??)
test CHANGED
@@ -260,7 +260,11 @@
260
260
 
261
261
  ・ファイル読込(System.IO.File.ReadLines) 問題なし
262
262
 
263
- ・ファイル書込(System.IO.File.WriteAllText) 書き込みできない
263
+ ・ファイル書込(System.IO.File.WriteAllText) Windowから確認すると書き込みできない
264
+
265
+ ・書き込み後に同じファイルを読み込むと、書いた内容が読み込めた
266
+
267
+ ・実は書き込めているが、Android上とWindows10上では認識が違う?
264
268
 
265
269
 
266
270
 

4

タイトル変更

2020/11/19 01:09

投稿

TAKE_SS
TAKE_SS

スコア40

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

3

ソースの追加と状況整理

2020/11/17 05:49

投稿

TAKE_SS
TAKE_SS

スコア40

test CHANGED
File without changes
test CHANGED
@@ -1,22 +1,256 @@
1
1
  ### やりたいこと・現状
2
2
 
3
- Android外部ストレージ(/storage/emulated/0/Documents/ など)に、ファイルをコピー(WindowsPCに接続した後コピー)したファイルに対して編集が出来ない
3
+ xamarin.Androidで、外部ストレージ(例えば/storage/emulated/0/Documents/)に、ファイルをコピー(WindowsPCに接続した後コピー)したファイルに対して編集が出来ない
4
4
 
5
5
  (PCからのコピー・読取りは可能)
6
6
 
7
- アプリからファイルの出力(書き込み)を行いたい
8
-
9
-
10
-
11
- ファイル書込処理を試しところ関数の応答でエラーになっていないのにファイル書き込み出来ていない
12
-
13
- WindowsPCからアクセスすると、ファイルのコピーや削除は出来るが、上書きなどの編集が出来ない
14
-
15
-
16
-
17
- 何かAndroid側設定か、アプリの許可設定などする事でファイル書き込みする事は出来ないでしょうか(又は、処理出来るAPIはないでしょうか)
18
-
19
- (xamarin等WindowsNGとうこともあるのか?)
7
+ アプリからファイルの出力(書き込み)を行いたい
8
+
9
+
10
+
11
+ 権限を取得してみを行う処理を作ってみ、ファイル書き込みされないのです(リードは出来ます)
12
+
13
+
14
+
15
+ 根本的に何か間違っているのでしょうか
16
+
17
+ 単に環境問題でしょうか
18
+
19
+ 何か分かる方がいたら教えていただきたいです
20
+
21
+
22
+
23
+ ```C#
24
+
25
+ using System;
26
+
27
+ using System.IO;
28
+
29
+ using System.Linq;
30
+
31
+ using System.Text;
32
+
33
+ using Android;
34
+
35
+ using Android.App;
36
+
37
+ using Android.Content.PM;
38
+
39
+ using Android.OS;
40
+
41
+ using Android.Runtime;
42
+
43
+ using Android.Support.Design.Widget;
44
+
45
+ using Android.Support.V4.App;
46
+
47
+ using Android.Support.V4.Content;
48
+
49
+ using Android.Support.V7.App;
50
+
51
+ using Android.Views;
52
+
53
+ using Android.Widget;
54
+
55
+
56
+
57
+ namespace RcvWriteTest1
58
+
59
+ {
60
+
61
+ [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
62
+
63
+ public class MainActivity : AppCompatActivity
64
+
65
+ {
66
+
67
+ protected override void OnCreate(Bundle savedInstanceState)
68
+
69
+ {
70
+
71
+ base.OnCreate(savedInstanceState);
72
+
73
+ Xamarin.Essentials.Platform.Init(this, savedInstanceState);
74
+
75
+ SetContentView(Resource.Layout.activity_main);
76
+
77
+
78
+
79
+ Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
80
+
81
+ SetSupportActionBar(toolbar);
82
+
83
+
84
+
85
+ Button btnEnd = (Button)FindViewById(Resource.Id.button2);
86
+
87
+ btnEnd.Click += BtnEnd_Click;
88
+
89
+ Button btnWrite = (Button)FindViewById(Resource.Id.button1);
90
+
91
+ btnWrite.Click += BtnWrite_Click;
92
+
93
+ }
94
+
95
+
96
+
97
+ public override bool OnCreateOptionsMenu(IMenu menu)
98
+
99
+ {
100
+
101
+ MenuInflater.Inflate(Resource.Menu.menu_main, menu);
102
+
103
+ return true;
104
+
105
+ }
106
+
107
+
108
+
109
+ public override bool OnOptionsItemSelected(IMenuItem item)
110
+
111
+ {
112
+
113
+ int id = item.ItemId;
114
+
115
+ if (id == Resource.Id.action_settings)
116
+
117
+ {
118
+
119
+ return true;
120
+
121
+ }
122
+
123
+
124
+
125
+ return base.OnOptionsItemSelected(item);
126
+
127
+ }
128
+
129
+
130
+
131
+ private void FabOnClick(object sender, EventArgs eventArgs)
132
+
133
+ {
134
+
135
+ View view = (View) sender;
136
+
137
+ Snackbar.Make(view, "Replace with your own action", Snackbar.LengthLong)
138
+
139
+ .SetAction("Action", (Android.Views.View.IOnClickListener)null).Show();
140
+
141
+ }
142
+
143
+
144
+
145
+ private void BtnEnd_Click(object sender, EventArgs e)
146
+
147
+ {
148
+
149
+ this.FinishAndRemoveTask(); // アプリケーションの終了
150
+
151
+ // アプリの強制終了させる
152
+
153
+ System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();
154
+
155
+ }
156
+
157
+ private void BtnWrite_Click(object sender, EventArgs e)
158
+
159
+ {
160
+
161
+ // 書き込み権限確認
162
+
163
+ var permissioncheckW = ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage);
164
+
165
+ // 書き込み権限がない場合はリクエストする
166
+
167
+ if(permissioncheckW == Android.Content.PM.Permission.Denied)
168
+
169
+ {
170
+
171
+ ActivityCompat.RequestPermissions(this, new []
172
+
173
+ {
174
+
175
+ Manifest.Permission.WriteExternalStorage
176
+
177
+ }, 0);
178
+
179
+ }
180
+
181
+ string strbase = Android.OS.Environment.ExternalStorageDirectory + "/Documents/";
182
+
183
+ string path = Path.Combine(strbase, "TEST.txt");
184
+
185
+ string path2 = Path.Combine(strbase, "TEST.CSV");
186
+
187
+
188
+
189
+ //FileInfo file = new FileInfo(path);
190
+
191
+ var Lines = System.IO.File.ReadAllLines(path2, Encoding.GetEncoding("shift-jis"));
192
+
193
+
194
+
195
+ // ***** ここで書き込みを行ってみるが、TEST.txtにはなにも書き込まれていない... *****
196
+
197
+ try
198
+
199
+ {
200
+
201
+ System.IO.File.WriteAllText(path, "TEST\n");
202
+
203
+ }
204
+
205
+ catch(Exception ex)
206
+
207
+ {
208
+
209
+ Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
210
+
211
+ }
212
+
213
+
214
+
215
+ }
216
+
217
+ public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
218
+
219
+ {
220
+
221
+ Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
222
+
223
+ // 要求して権限がすべて許可された場合にダイアログを表示
224
+
225
+ if (grantResults.Cast<Permission>().All(x => x == Permission.Granted))
226
+
227
+ {
228
+
229
+ new Android.App.AlertDialog.Builder(this)
230
+
231
+ .SetTitle("Runtime Permission")
232
+
233
+ .SetMessage("All Granted")
234
+
235
+ .SetPositiveButton("OK", (_, __) => { })
236
+
237
+ .Show();
238
+
239
+ }
240
+
241
+ base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
242
+
243
+ }
244
+
245
+ }
246
+
247
+ }
248
+
249
+
250
+
251
+ ```
252
+
253
+ 上記の処理でファイル書込の処理を試したところ、特にエラーが発生していないようなのに(catch側に来ないのに)書き込みが出来ていない
20
254
 
21
255
  (別フォルダでも良いので自分で追加したファイルの入出力さえ出来れば良いのですが。。。)
22
256
 
@@ -24,39 +258,9 @@
24
258
 
25
259
  ### 試したこと
26
260
 
27
- ・ファイル読込(System.IO.File.ReadLines)
261
+ ・ファイル読込(System.IO.File.ReadLines) 問題なし
28
-
29
-  問題なし(正常にデータ読み込み可能)
262
+
30
-
31
- ・ファイル作成(System.IO.File.CreateText)
32
-
33
-  応答にエラーは無いが,ファイルが作成されていない
34
-
35
- ・ファイル書込(System.IO.File.WriteLine)
263
+ ・ファイル書込(System.IO.File.WriteAllText 書き込みできない
36
-
37
-  応答にエラーは無いが,ファイルが書き込まれていない
38
-
39
- ・Android機器をPCに接続して、Windowsアプリ(メモ帳など)でアクセスして上書き保存不可(コピーや削除、詠み込みは可能)
40
-
41
- ・CheckSelfPermissionではリード・ライト共に許可(Granted)
42
-
43
- ・ExternalStorageStateでステータスを確認した結果、mounted
44
-
45
- ・MediaMountedReadOnly はfalse
46
-
47
- ・MediaMounted はtrue
48
-
49
-
50
-
51
- ### 試したこと(追加)
52
-
53
- ・Android端末をPCに接続し、Windowsのエクスプローラから操作
54
-
55
-  → 新規フォルダの作成は出来るが、ファイル作成が出来ない
56
-
57
-   コピーしたファイルをNotepad等で開いて上書きしようとしても出来ない
58
-
59
-  → プログラム云々の前に、Android側で制限があるようにみえる
60
264
 
61
265
 
62
266
 

2

環境で案Androidの機種明記

2020/11/17 05:46

投稿

TAKE_SS
TAKE_SS

スコア40

test CHANGED
File without changes
test CHANGED
@@ -60,8 +60,8 @@
60
60
 
61
61
 
62
62
 
63
- 環境
63
+ ### 環境
64
64
 
65
- android : Android7.0
65
+ android : Android7.0(HUAWEI MediaPad M3 Lite 10)
66
66
 
67
67
  PC   : Windows10 , Visualstudio2019(xamarin)

1

試したこと追記

2020/08/12 08:10

投稿

TAKE_SS
TAKE_SS

スコア40

test CHANGED
File without changes
test CHANGED
@@ -48,6 +48,18 @@
48
48
 
49
49
 
50
50
 
51
+ ### 試したこと(追加)
52
+
53
+ ・Android端末をPCに接続し、Windowsのエクスプローラから操作
54
+
55
+  → 新規フォルダの作成は出来るが、ファイル作成が出来ない
56
+
57
+   コピーしたファイルをNotepad等で開いて上書きしようとしても出来ない
58
+
59
+  → プログラム云々の前に、Android側で制限があるようにみえる
60
+
61
+
62
+
51
63
  環境
52
64
 
53
65
  android : Android7.0