質問編集履歴

4

質問内容をより正確に変更

2019/10/02 06:33

投稿

adk
adk

スコア12

test CHANGED
@@ -1 +1 @@
1
- パーミッションはついているが内部ストレージファイル保存ない
1
+ 内部ストレージ内のファイルをadb見れない
test CHANGED
@@ -2,66 +2,148 @@
2
2
 
3
3
 
4
4
 
5
- Android Studioで内部ストレージにtextファイルを保存しようとしていますが、うまくいきません
5
+ Android Studioで内部ストレージにtextファイルを保存しようとしています。
6
6
 
7
7
 
8
8
 
9
- var path = getExternalFilesDir(null)?.getAbsolutePath()
9
+ ボタンを押した時に下記コードのsaveFilereadFileが実行されるようにコードを組んでおり、
10
10
 
11
- val root = File(path)
12
-
13
- if (!root.exists()) {
14
-
15
- root.getParentFile().mkdir();
11
+ readFileの中身がちゃんと出力されることから内部ストレージへのファイルの保存は出来ているものと思われます。
16
-
17
- }
18
12
 
19
13
 
20
14
 
21
- val FileName="test.txt"
22
-
23
- val fileContents = "Hello world!"
24
-
25
- applicationContext.openFileOutput(FileName, Context.MODE_PRIVATE).use {
15
+ これらのデータは/data/data/パッケージ名/files/内に保存されていると思われるのですが、その中身を見ようとして
26
-
27
- it.write(fileContents.toByteArray())
28
-
29
- }
30
16
 
31
17
 
32
18
 
19
+ adb shell
20
+
21
+ run-as パッケージ名
33
22
 
34
23
 
35
24
 
36
-
37
- 現状、公式リファレンスをもとに関数を組んでいるので
25
+ ターミナル打ち込んでも「パッケージ名 is Unknown」となってしま
38
-
39
- ContextCompat.checkSelfPermissionの結果は「PackageManager.PERMISSION_GRANTED」です。
40
26
 
41
27
 
42
28
 
29
+ この原因についてご存じの方がいらっしゃればお教え願えませんでしょうか。
43
30
 
44
31
 
45
- if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
46
32
 
47
- //パーミッション付与されていない
33
+ class MainActivity : AppCompatActivity() {
48
34
 
49
- Toast.makeText(applicationContext, "パーミッションは得られてません", Toast.LENGTH_LONG).show()
35
+
50
36
 
51
- RequestStoragePermission();//パーミッションを得るための関数
37
+ private val fileName = "testfile.txt"
52
38
 
53
- }else{
39
+
54
40
 
41
+ override fun onCreate(savedInstanceState: Bundle?) {
42
+
43
+ super.onCreate(savedInstanceState)
44
+
45
+ setContentView(R.layout.activity_main)
46
+
47
+
48
+
49
+ // Save file
50
+
51
+ buttonSave.setOnClickListener(View.OnClickListener {
52
+
53
+
54
+
55
+ // get string contents of EditText
56
+
57
+ val contents = editText.text.toString()
58
+
59
+
60
+
61
+ if (!contents.isEmpty()) {
62
+
63
+ saveFile(fileName, contents)
64
+
65
+ textView.text = getString(R.string.saved)
66
+
67
+ } else {
68
+
69
+ textView.text = getString(R.string.no_text)
70
+
71
+ }
72
+
73
+ })
74
+
75
+
76
+
77
+ // Read file
78
+
79
+ buttonRead.setOnClickListener(View.OnClickListener {
80
+
81
+ val str = readFiles(fileName)
82
+
83
+ if (str != null) {
84
+
85
+ textView.text = str
86
+
87
+ } else {
88
+
89
+ textView.text = getString(R.string.read_error)
90
+
91
+ }
92
+
93
+ })
94
+
95
+ }
96
+
97
+
98
+
99
+
100
+
101
+ private fun saveFile(file: String, str: String) {
102
+
103
+
104
+
55
- Toast.makeText(applicationContext, "パーミッションは得られてます", Toast.LENGTH_LONG).show()
105
+ applicationContext.openFileOutput(file, Context.MODE_PRIVATE).use {
106
+
107
+ it.write(str.toByteArray())
56
108
 
57
109
  }
58
110
 
111
+
59
112
 
113
+ //File(applicationContext.filesDir, file).writer().use {
60
114
 
61
- パーミッションはついているのに内部ストレージには保存されない現象について、
115
+ // it.write(str)
62
116
 
63
- 原因がわからなくて困っています。
117
+ //}
64
118
 
119
+ }
65
120
 
121
+
66
122
 
67
- このような現象について心当たりのある方はご教授願えませんでしょうか。
123
+ private fun readFiles(file: String): String? {
124
+
125
+
126
+
127
+ // to check whether file exists or not
128
+
129
+ val readFile = File(applicationContext.filesDir, file)
130
+
131
+
132
+
133
+ if(!readFile.exists()){
134
+
135
+ Log.d("debug","No file exists")
136
+
137
+ return null
138
+
139
+ }
140
+
141
+ else{
142
+
143
+ return readFile.bufferedReader().use(BufferedReader::readText)
144
+
145
+ }
146
+
147
+ }
148
+
149
+ }

3

コードを追加

2019/10/02 06:33

投稿

adk
adk

スコア12

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,34 @@
3
3
 
4
4
 
5
5
  Android Studioで内部ストレージにtextファイルを保存しようとしていますが、うまくいきません。
6
+
7
+
8
+
9
+ var path = getExternalFilesDir(null)?.getAbsolutePath()
10
+
11
+ val root = File(path)
12
+
13
+ if (!root.exists()) {
14
+
15
+ root.getParentFile().mkdir();
16
+
17
+ }
18
+
19
+
20
+
21
+ val FileName="test.txt"
22
+
23
+ val fileContents = "Hello world!"
24
+
25
+ applicationContext.openFileOutput(FileName, Context.MODE_PRIVATE).use {
26
+
27
+ it.write(fileContents.toByteArray())
28
+
29
+ }
30
+
31
+
32
+
33
+
6
34
 
7
35
 
8
36
 

2

コードを追加

2019/09/28 10:33

投稿

adk
adk

スコア12

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,24 @@
12
12
 
13
13
 
14
14
 
15
+
16
+
17
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
18
+
19
+ //パーミッション付与されていない
20
+
21
+ Toast.makeText(applicationContext, "パーミッションは得られてません", Toast.LENGTH_LONG).show()
22
+
23
+ RequestStoragePermission();//パーミッションを得るための関数
24
+
25
+ }else{
26
+
27
+ Toast.makeText(applicationContext, "パーミッションは得られてます", Toast.LENGTH_LONG).show()
28
+
29
+ }
30
+
31
+
32
+
15
33
  パーミッションはついているのに内部ストレージには保存されない現象について、
16
34
 
17
35
  原因がわからなくて困っています。

1

質問内容を変更

2019/09/28 10:27

投稿

adk
adk

スコア12

test CHANGED
@@ -1 +1 @@
1
- 内部ストレージにtxtファイルを作って保存した
1
+ パーミッションはついているが内部ストレージにファイル保存できな
test CHANGED
@@ -2,60 +2,20 @@
2
2
 
3
3
 
4
4
 
5
- Android StudioのKotlinでボタンを押した時、
6
-
7
- 内部ストレージにtextファイルを保存しようとしているのですが保存されません。
5
+ Android Studioで内部ストレージにtextファイルを保存しようとしていすが、うくいきません。
8
6
 
9
7
 
10
8
 
11
- val FileName="test.txt"
9
+ 現状、公式リファレンスをもとに関数を組んでいるのですが
12
10
 
13
- val data:String = "test"
14
-
15
- try {
16
-
17
- val fos = openFileOutput(FileName,Context.MODE_PRIVATE)
18
-
19
- fos.write(data.toByteArray())
20
-
21
- fos.close()
22
-
23
- } catch (e: FileNotFoundException){
24
-
25
- e.printStackTrace()
26
-
27
- }catch (e: NumberFormatException){
28
-
29
- e.printStackTrace()
30
-
31
- }catch (e: IOException){
32
-
33
- e.printStackTrace()
34
-
35
- }catch (e: Exception){
36
-
37
- e.printStackTrace()
38
-
39
- }
40
-
41
- Toast.makeText(applicationContext,"保存完了",Toast.LENGTH_LONG).show()
11
+ ContextCompat.checkSelfPermissionの結果は「PackageManager.PERMISSION_GRANTED」です。
42
12
 
43
13
 
44
14
 
45
- AndroidManifestのパーミッションには
15
+ パーミッションはついているの内部ストレージに保存されない現象について、
46
16
 
47
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
48
-
49
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
50
-
51
- を入れています。
17
+ 原因がわからなく困っています。
52
18
 
53
19
 
54
20
 
55
- コードは通っているため、内部ストレージを書き換えるための権限がついていないのが原因ではと思うのですが、
56
-
57
- どうすれば権限が付与できるのかがわかりません。
58
-
59
-
60
-
61
- すれば内部ストレージ書込みが出来のかご教授願えませんでしょうか。
21
+ このよな現象ついて心当たりのあ方はご教授願えませんでしょうか。