記事
【SBS 2D Player VR】どうして権限が必要なのか、権限を付与する危険性について
SBS 2D Player VRではメディアフォルダへのアクセス権限の付与を推奨しています。
権限を付与することによって、ストレージの圧迫率を激減させることができます。
ではなぜ、メディアフォルダへのアクセス権限の有無によってそのような違いが生まれるのでしょうか。
それについて知るには、アプリがスマホにあるデータにアクセスするために必要な制約について知る必要があります。
スマホとスマホアプリ
スマホにアプリをインストールする。スマホの中にアプリを入れる。
言葉のイメージからスマホとスマホアプリは対等な立ち位置にいて、両者間で自由にデータのやり取りができると思ってしまうかもしれません。
しかし実際にはスマホアプリというのは決してスマホ本体の情報をたやすく見れるわけではありません。
基本的にアプリは自分の中の情報しか参照することはできません。
ただし、アプリ外側から渡されたデータに関しては参照することができます。
(ユーザーが選択した動画のみ、参照を渡せる)

SBS2DPlayerVRでは、権限を付与していない場合、上記の画面でインポートする動画を選択します。
この動画を選択しているところがまさに「ユーザーが選択した動画のみ、参照を渡せる」という部分になっています。
一度参照を渡されることによって、アプリ側からも自由に外部のデータを見に行くことができるようになります。
(アクセスできるのは参照が渡されたデータのみ)
このようにすることで、アプリは外部のデータを参照することができます。
しかしこれには大きな欠点があります。
それは一度アプリを終了すると、渡されたデータの参照が切れてしまうということです。
アプリを終了するとローカルデータへの参照が切れる
一度アプリを落としたあとに、再度起動したとします。
その場合、例え参照先にデータがちゃんとある場合でも、アプリ側はXXX.mp4というデータを参照できなくなります。
もう一度ユーザーによってXXX.mp4を選択してもらい、参照をアプリ側に渡さないといけません。
実際、Playストアにあるこの手の動画再生アプリは、起動ごとに動画を選択して再生するというものばかりだと思います。
これはAndroid11からの仕様でセキュリティ上の問題でそうせざるを得ないのです。
アプリ再起動後も再インポートしないで再生するには
アプリの外部データへのアクセスは、「ユーザーが選択したもののみ」かつ「アプリが終了されるとリセット」という厳しい制限があります。
しかし逆に言えば、内部データへのアクセスはいつでも自由に行うことができます。自分自身ですので当たり前ですね。
ということは、外部のデータの参照を持っているときに、アプリ内部に参照先のデータそのもの(ここでは動画)を複製してしまえば、それ以降のアクセスは外部に見に行く必要がなくなるので、再起動時に再インポートもしなくていいということになります。
こうすることによって、再起動しても再インポートをすることなく動画の再生ができるというわけです。
しかしこの方法にもかなり大きなデメリットがあります。
スマホ本体とアプリ内部に2つのXXX.mp4が存在していることになり、
インポートした動画1つにつき、スマホ本体のストレージを2倍圧迫することになります。
動画というのは1つでもそれなりにサイズがあるものなので、
それが2倍になるということがどれほどストレージを圧迫することなのかわかると思います。
動画を複製しないで、インポートも一回だけにしたい
再起動時、以前インポートしていた動画をそのまま再生したい。
でもアプリ内に動画を複製したくない。
ここまで長々と説明してきたことを否定するような、夢ようなの抜け道があるんです。
それはアプリにメディアへのアクセス権限を持たせることです。
やっと出てきたアクセス権限ですが、これがあるとどのようなことができるのか。
参照をもらわなくても、アプリ内に動画データがなくても、メディアフォルダに直接アクセスできるので、アプリ側からそのまま動画データを参照、再生できるのです。
これでストレージを圧迫することなく、インポートも最初の一回だけで、いつでもその動画をアプリで再生できるようになります。
(そもそもインポートそのものが必要ないのですが、このアプリでは不必要な動画を一覧に表示させない、シークバーのプレビュー表示などの機能のためにインポートを挟んでいろいろな処理をしています。)
以上のことから、SBS 2D Player VRではメディアフォルダへのアクセス権の付与を推奨しています。
簡単にアプリにアクセス権を付与しないで
アクセス権を付与することを推奨するといいながら、次の行で矛盾したことを言いました。
もちろん推奨しているのは本音で、ストレージの圧迫率も段違いでしょう。
しかし、アクセス権をアプリに付与する。
このアプリで言えばメディアフォルダへのアクセス権をアプリに付与するという行為は、本当に信頼できるアプリだけにするべきです。
例えばの話をします。
メディアフォルダへのアクセス権を持ったアプリは、スマホ内に保存されている写真や動画に自由にアクセスすることができます。
もしそのようなアプリに、こっそり裏で写真や動画ファイルを外部に送信させるようなプログラムが忍ばせてあった場合、あなたのプライベートな写真、動画が第三者にわたってしまいます。
権限さえあれば、そのような処理をすることは非常に簡単ですし、ユーザー視点からは気づくのはほぼ不可能です。
もちろんこれはれっきとした犯罪ですし、このアプリでそのようなことをするつもりは一切ありません。
SBS 2D Player VRには誓ってそのようなプログラムはありませんが、はっきり言って、「信じてください」としか言いようがないのも事実。
オープンソースにすれば証明になりますが、有料で売っている以上そのようなことはしたくありません。
(Android StudioをインストールしてLogcatを見ることによって、スマホが今どんな処理をしているかというのを一応確認できます。難易度は高め。)
最後に
権限がない場合は動画をアプリ内に複製して動画を再生。
権限がある場合はメディアフォルダを直接参照して動画を再生。
権限を付与しなくてもこのアプリは全機能を使えます。
しかし、権限があればストレージを圧迫することなく、快適に使えるようになります。
が、権限を付与するということがどれだけ危険なことなのか、今一度認識していただきたく、あえてこの記事で説明させていただきました。