タイトル
Android11は仕様がかわり
画像は 各ストレージ直下の[ DICM と Pictures ]フォルダ内(その子フォルダ)でしか保存できません。
アプリの権限は、[ READ_EXTERNAL_STORAGE , WRITE_EXTERNAL_STORAGE ]が必要です。
またすべてのフォルダで画像を保存できるようにするには、'android.permission.MANAGE_EXTERNAL_STORAGE'権限を取得する必要があります。
マニフェストとコード(権限リクエスト)と両方記述が必要です
ContentResolver.insert
に渡す Uri は、
.getContentUri([定義済み定数|ボリューム名]) から取得します。
定義済みの Uri 変数定数を使うと メインストレージにしか書き込めません。(ここが皆がわからずに SDcradに書き込めないと はまっている箇所です)
使える 外部 volumeは、
"external_primary" , MediaStore.VOLUME_EXTERNAL_PRIMARY
"xxxx-xxxx"; // SDカードの場合は数値に置き換える
です。
MediaStore.VOLUME_EXTERNAL_PRIMARYの値は "external_primary" です。
DelphiなどJAVA以外から操作する場合は、定数は定義されていないので 文字列を使ったほうがいいでしょう。
'xxxx-xxxx'は MediaStore.getExternalVolumeNames(context)で一覧を取得できます。
uri = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
uri = MediaStore.Images.Media.getContentUri("external_primary");
uri = MediaStore.Images.Media.getContentUri("xxxx-xxxx");
uri = MediaStore.Files.getContentUri(volume);
のようになります。
SDCardは ファイルパスが
/strage/xxxx-xxxx/
になっています。
xxxx-xxxxは、メディアごとの識別子なので、別のカードやフォーマットすると変わってしまいます
ファイルパスは
メインストレージ: /strage/emulated/[ユーザーID:通常は0]/相対パス(可視領域)
外付けメディア: /strage/xxxx-xxxx/相対パス(可視領域)
ファイル名から取得する場合は、正規表現で ^/strage/([^/]+)/ にファイル名がマッチするか確認すればいいと思います
MediaStore.getExternalVolumeNames(context)のリスト値にないなら、メインストレージとか仮想メディアとか。
仕様が規格外の端末は相手にする必要はないと思います。
マッチしたらそれが ファイルの volumeです。getContentUriに渡す値になります!
ContentResolver.insert関数の結果で得た URIを
ContentResolver.openOutputStream関数に渡してオープンすると パスとファイルが作成されるので
存在しないフォルダの準備はしなくていいです。
フォルダを指定したい場合は、
ContentResolverに渡す値に, "relative_path" の項目で 相対パス(可視領域) を追加します
Pictures/子フォルダ/テスト.jpg に保存したい場合は
"relative_path"の値は "Pictures/子フォルダ" になります
執筆:2023.10.28
編集:2023.10.28
編集:2023.10.28
Android11は仕様がかわり
画像は 各ストレージ直下の[ DICM と Pictures ]フォルダ内(その子フォルダ)でしか保存できません。
アプリの権限は、[ READ_EXTERNAL_STORAGE , WRITE_EXTERNAL_STORAGE ]が必要です。
またすべてのフォルダで画像を保存できるようにするには、'android.permission.MANAGE_EXTERNAL_STORAGE'権限を取得する必要があります。
マニフェストとコード(権限リクエスト)と両方記述が必要です
ContentResolver.insert
に渡す Uri は、
.getContentUri([定義済み定数|ボリューム名]) から取得します。
定義済みの Uri 変数定数を使うと メインストレージにしか書き込めません。(ここが皆がわからずに SDcradに書き込めないと はまっている箇所です)
使える 外部 volumeは、
"external_primary" , MediaStore.VOLUME_EXTERNAL_PRIMARY
"xxxx-xxxx"; // SDカードの場合は数値に置き換える
です。
MediaStore.VOLUME_EXTERNAL_PRIMARYの値は "external_primary" です。
DelphiなどJAVA以外から操作する場合は、定数は定義されていないので 文字列を使ったほうがいいでしょう。
'xxxx-xxxx'は MediaStore.getExternalVolumeNames(context)で一覧を取得できます。
uri = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
uri = MediaStore.Images.Media.getContentUri("external_primary");
uri = MediaStore.Images.Media.getContentUri("xxxx-xxxx");
uri = MediaStore.Files.getContentUri(volume);
のようになります。
SDCardは ファイルパスが
/strage/xxxx-xxxx/
になっています。
xxxx-xxxxは、メディアごとの識別子なので、別のカードやフォーマットすると変わってしまいます
ファイルパスは
メインストレージ: /strage/emulated/[ユーザーID:通常は0]/相対パス(可視領域)
外付けメディア: /strage/xxxx-xxxx/相対パス(可視領域)
ファイル名から取得する場合は、正規表現で ^/strage/([^/]+)/ にファイル名がマッチするか確認すればいいと思います
MediaStore.getExternalVolumeNames(context)のリスト値にないなら、メインストレージとか仮想メディアとか。
仕様が規格外の端末は相手にする必要はないと思います。
マッチしたらそれが ファイルの volumeです。getContentUriに渡す値になります!
ContentResolver.insert関数の結果で得た URIを
ContentResolver.openOutputStream関数に渡してオープンすると パスとファイルが作成されるので
存在しないフォルダの準備はしなくていいです。
フォルダを指定したい場合は、
ContentResolverに渡す値に, "relative_path" の項目で 相対パス(可視領域) を追加します
Pictures/子フォルダ/テスト.jpg に保存したい場合は
"relative_path"の値は "Pictures/子フォルダ" になります
カテゴリー: 総合
2023.10.28
お買い得 スマホ MNP 秋のキャンペーン
スマホは、電話番号移動のMNPで乗り換えがお得
キャンペーンしている携帯会社が多いため
新規よりもMNPして割引き価格で購入したほうがお得です
楽天の価格破壊に続き いまでは各社 月額1000円未満のプランが豊富です。
楽天だと3段階の従量制なので、値段があがる心配がありますが
定額プランなら気にせず、ストレスなく利用できます
定額プランのいいところ
・定額制なので安心
・使用する通信料や通話時間に応じて支払いを決めることができる
・高速通信を使い切ったら追加購入できる
MNPで端末とセットで加入するとかなり お得です
料金プラン以外にも
加入の事務手数料、解約金、再発行手数料、データ追加料金などをよくみて検討しましょう
また
スマホには、周波数バンドといって 通信網により利用できる周波数バンドが違うので
au,ドコモ、ソフトバンクのどの通信網になるのか、また、その際の機種をよく確認しましょう。
先にスマホを決める場合
→ スマホが対応している通信網を選択する
通信網を決めている場合
→ スマホがその通信網に対応しているか確認する
おすすめの通信事業者をみてみましょう
つづく(準備中)
編集:2021.11.08
スマホは、電話番号移動のMNPで乗り換えがお得
キャンペーンしている携帯会社が多いため
新規よりもMNPして割引き価格で購入したほうがお得です
楽天の価格破壊に続き いまでは各社 月額1000円未満のプランが豊富です。
楽天だと3段階の従量制なので、値段があがる心配がありますが
定額プランなら気にせず、ストレスなく利用できます
定額プランのいいところ
・定額制なので安心
・使用する通信料や通話時間に応じて支払いを決めることができる
・高速通信を使い切ったら追加購入できる
MNPで端末とセットで加入するとかなり お得です
料金プラン以外にも
加入の事務手数料、解約金、再発行手数料、データ追加料金などをよくみて検討しましょう
また
スマホには、周波数バンドといって 通信網により利用できる周波数バンドが違うので
au,ドコモ、ソフトバンクのどの通信網になるのか、また、その際の機種をよく確認しましょう。
先にスマホを決める場合
→ スマホが対応している通信網を選択する
通信網を決めている場合
→ スマホがその通信網に対応しているか確認する
おすすめの通信事業者をみてみましょう
つづく(準備中)
カテゴリー: 総合
2021.11.08
TWRPの操作に認証をかけるには?
おそらくこれを読んでいる方は、
紛失時に第三者によりデータ取得させないために
TWRPに関する操作に認証をかけたいのではないでしょうか
こたえは、公式サイトのFAQ(https://twrp.me/faq/securetwrp.html)に書いてあります。
従いまして、TWRPプロジェクトの方針として「TWRPの操作に認証」機能を加える気はないようです。
身近な事例でわかりやすく表現すると
セキュリティ意識が低いとか
実際日常生活でTWRPをいれた端末をつかっていない人たちで構成されているのかもしれませんね
戸締り用心,火の用心ってことば教えてあげて。
検索するとわかりますが、海外のフォーラムなどで
自転車のロックが1個だけなら盗まれるが2,3個あれば盗まれる確率が減るのと同じで
ブートローダーにはオプションで操作認証機能は必要だと思います。
別のブートローダーを選択するしかないですね
寄付金目当てで運営してるのでしょうから、フォークして認証を組み込んだものを広めたら、死活問題なのであわてて、機能追加してくると思いますけどね。
まとめ
執筆:2019.02.04
編集:2019.02.04
編集:2019.02.04
おそらくこれを読んでいる方は、
紛失時に第三者によりデータ取得させないために
TWRPに関する操作に認証をかけたいのではないでしょうか
こたえは、公式サイトのFAQ(https://twrp.me/faq/securetwrp.html)に書いてあります。
要約すると
ほかの抜け道で、データを取得できるから、
俺たちのTWRPに認証なんかいれないぜ!
いれてしまったら俺たちが使いにくくなるじゃないか!
俺たちのTWRPに認証なんかいれないぜ!
いれてしまったら俺たちが使いにくくなるじゃないか!
データ漏えいが気になるなら、Androidの設定で暗号化しやがれ!
だそうです。従いまして、TWRPプロジェクトの方針として「TWRPの操作に認証」機能を加える気はないようです。
身近な事例でわかりやすく表現すると
窓が開いているから、玄関の戸締りなんかしないぜ!
文句あるなら家財を全部金庫にしまえ(暗号化しろ)
と言っているような感じですね。文句あるなら家財を全部金庫にしまえ(暗号化しろ)
セキュリティ意識が低いとか
実際日常生活でTWRPをいれた端末をつかっていない人たちで構成されているのかもしれませんね
戸締り用心,火の用心ってことば教えてあげて。
検索するとわかりますが、海外のフォーラムなどで
えっ信じられないセキュリティ意識低すぎ。
必要でしょ!
なんでいれないの
などなどいっぱい苦情が書かれています。
自転車のロックが1個だけなら盗まれるが2,3個あれば盗まれる確率が減るのと同じで
ブートローダーにはオプションで操作認証機能は必要だと思います。
別のブートローダーを選択するしかないですね
寄付金目当てで運営してるのでしょうから、フォークして認証を組み込んだものを広めたら、死活問題なのであわてて、機能追加してくると思いますけどね。
まとめ
- 「TWRPの操作に認証」機能はない
- TWRPをインストールした端末の紛失対策
-
- Androidの設定:暗号化でデータを暗号化する
(Android6以降の端末は工場出荷時に暗号化「する」になっているそうです)
「設定」「セキュリティとプライバシー」「暗号化」
副作用として、すべての操作で暗号・復号が発生するため体感速度レベルで劇的に遅くなります。
- Androidの設定:暗号化でデータを暗号化する
カテゴリー: 総合
2019.02.04
Androidのシャットダウンコマンド
電源を切る
再起動
スマホの画面が反応しない
強制終了したい
強制再起動したい
電源を切る
reboot -p
再起動
reboot
スマホの画面が反応しない
強制終了したい
電源ボタンを長押し
強制再起動したい
USB接続して
adb shell reboot
adb shell reboot
» 続きを読む
カテゴリー: 総合
2016.11.29
Android 広告ブロック の仕方
/etc/hosts
にループバックアドレスを登録して、外に飛んでいかないようにする方法があるようです
root機なら
# システムを書き込み可にリマウント
mount -o rw,remount /system
adb接続なら
adb remount
adb shell
拒否したいホスト名
127.0.0.1 に登録するのが流行っているようですけど
例は、使う可能性の低い10.1番にしてます
>> リダイレクトでファイル追記モードで押し込みます
間違って > にすると上書きされて消えますので注意してくださいね
echo 127.0.10.1 example.com >> /etc/hosts
エディタで編集できる場合は
127.0.10.1 example.com
を追記します
/etc/hosts の初期の内容
127.0.0.1 localhost
変更後
127.0.0.1 localhost
127.0.10.1 example.com
127.0.10.1 doubleclick.net googleads.g.doubleclick.net
地道に1っ個ずつ自分で登録するようにするといいと思います
広告をカットすると通信パケットの節約ができます
注意
よそから拾ってたhostsをいれると、悪意のIPに設定されていた場合、
乗っ取りや偽サイト、銀行などのログインやクレジットカード、いろいろハッキングされる恐れがあります
★127.で始まっていない場合は、いれないほうがいいです。
/etc/hosts
にループバックアドレスを登録して、外に飛んでいかないようにする方法があるようです
root機なら
# システムを書き込み可にリマウント
mount -o rw,remount /system
adb接続なら
adb remount
adb shell
拒否したいホスト名
127.0.0.1 に登録するのが流行っているようですけど
例は、使う可能性の低い10.1番にしてます
>> リダイレクトでファイル追記モードで押し込みます
間違って > にすると上書きされて消えますので注意してくださいね
echo 127.0.10.1 example.com >> /etc/hosts
エディタで編集できる場合は
127.0.10.1 example.com
を追記します
/etc/hosts の初期の内容
127.0.0.1 localhost
変更後
127.0.0.1 localhost
127.0.10.1 example.com
127.0.10.1 doubleclick.net googleads.g.doubleclick.net
地道に1っ個ずつ自分で登録するようにするといいと思います
広告をカットすると通信パケットの節約ができます
注意
よそから拾ってたhostsをいれると、悪意のIPに設定されていた場合、
乗っ取りや偽サイト、銀行などのログインやクレジットカード、いろいろハッキングされる恐れがあります
★127.で始まっていない場合は、いれないほうがいいです。
» 続きを読む
カテゴリー: 総合
2016.06.08