Androidプログラミング質問スレ revision53 [無断転載禁止]©2ch.net

レス数が950を超えています。1000を超えると書き込みができなくなります。
2017/02/25(土) 12:46:10.62ID:NbM7/95y0
このスレではAndroidSDK・NDKやAndroidマーケットに関する質問を扱ってます。

※プログラミング自体が初めて!なあなたには↓↓↓こちらへ
スレ立てるまでもない質問はここで 144匹目
http://echo.2ch.net/test/read.cgi/tech/1473241397/
Eclipse統合M35【Java/C++/Ruby/Python/Scala】
http://echo.2ch.net/test/read.cgi/tech/1405391739/
★★Java質問・相談スレッド179★★
http://echo.2ch.net/test/read.cgi/tech/1476706523/
****オススメ関連リンク****
■ TechBoosterhttp://techbooster.org/category/android/tableofcontents/
■ Androidメモhttp://www.saturn.dti.ne.jp/npaka/android/index.html
■ 逆引きAndroid入門http://www.adakoda.com/android/
■ Androidプログラマへの道http://wiki.livedoor.jp/moonlight_aska/
■ Android Wiki*http://wikiwiki.jp/android/

****公式リファレンス****
■ Android developershttp://developer.android.com/index.html
■ ソフトウェア技術ドキュメントを勝手に翻訳http://www.techdoctranslator.com/
■ 日本Androidの会http://www.android-group.jp/
■ StackOverFlowhttp://stackoverflow.com/questions/tagged/android

****前スレ****
Androidプログラミング質問スレ revision51
http://echo.2ch.net/test/read.cgi/tech/1457303564/
Androidプログラミング質問スレ revision52
http://echo.2ch.net/test/read.cgi/tech/1479305887/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2020/12/17(木) 00:02:44.52ID:o7AcHBqk0
>>865
出所不明のファイルを残すのは迷惑なんで、
/Documents/アプリ名.txt
とかに保存するのがいいんじゃないかな?

これに関連して聞きたいんだが、
「初回インストールからxx日間は無料で全機能試用できます」みたいなアプリ
があるけど、再インストールで制限するには、インストールしたことがある
という情報を何処かに残しとかなきゃならないと思うが、どうやってるんだろ?

ファイルで残しても、それがばれて晒されたらダメだし・・・
2020/12/17(木) 16:59:10.04ID:wkq0rsoS0
Playからの導入なら、アカウントごとに導入したアプリ全部管理されているから
そこで分かるんでないの
2020/12/17(木) 18:25:36.92ID:o7AcHBqk0
>>867
その情報を取得する方法をご存知でしたら、お教えください。
2020/12/20(日) 21:38:49.61ID:cAZPKzhg0
macってカーソル移動遅くないっすか
2020/12/27(日) 01:20:08.06ID:x23qUutta
レイアウトで作ったボタンってkotlinではIDそのまま変数として書けてたよね
なんか書けないんだけど仕様変わった?
レイアウトのコードでアクティビティとの連携は確認してます
2020/12/27(日) 10:22:31.22ID:ViEBPAxt0
binding経由でやれ
2021/01/09(土) 22:51:40.61ID:OAoK9tge0
glslでsamplerExternalOESって関数に引数として渡せんの?
まぁ別に渡す必要もないんだけど。よくわからん

uniform samplerExternalOES t;

void func(samplerExternalOES t) { <-err sampler2Dならおk
}
2021/01/10(日) 00:23:34.48ID:GNExugp70
自分が出来ると心から信じることができれば必ずやれる
2021/01/11(月) 15:36:15.11ID:xcVBc5fh0
uniform変数を引数にするという発想がそもそも無いから誰も試してないだろうな
2021/01/19(火) 09:13:38.50ID:9PjIRRAP0
音声検索を
startActivity(Intent(Intent.ACTION_VOICE_COMMAND).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
で行っていたのですが、Android10になってからスマホがスタンバイ状態の時に起動できなくなりました。

何か対策はあるでしょうか?教えてください。
2021/01/19(火) 15:11:53.72ID:wN8Acue10
スタンバイ状態のときにアシスタントがオフラインモードになっているとかではないの?
2021/01/19(火) 17:07:19.33ID:9PjIRRAP0
>>876
よく調べたらスタンバイ状態だけでなく他のアプリ起動中もだめで、
自分のアプリがフォアグラウンドでないとダメでした。
スタンバイ中は関係なさそうです。
android10より前は使えたのですが。
もう少し調べます。
2021/01/19(火) 21:27:15.57ID:9PjIRRAP0
>>877
自己解決しました。
「他のアプリの上に重ねて表示」の権限を自分のアプリに設定したところ、アシスタントが表示されるようになりました。
それにしても、長いこと悩んでいたのですが、書き込んだら自分で解決できるのが不思議。
2021/02/04(木) 16:33:42.41ID:21oXIVVH0
あるあるだね
2021/02/07(日) 14:34:07.32ID:BPC0VHNi0
開発環境 : Androidstudio 
使用言語 ; JAVA
仮想デバイス ; Pixel 2 API 26

通知音を無音にしたいのですが、どの様に書いたら良いですか?

現在の状況は以下に、NotificationChannel notificationChannel = new NotificationChannel(chID, chID, NotificationManager.IMPORTANCE_LOW);
で無音化出来てません。
2021/02/07(日) 14:35:29.24ID:BPC0VHNi0
//通知チャンネルIDを生成してインスタンス化
//NotificationChannel notificationChannel = new NotificationChannel(chID, chID, NotificationManager.IMPORTANCE_DEFAULT);
NotificationChannel notificationChannel = new NotificationChannel(chID, chID, NotificationManager.IMPORTANCE_LOW);
//NotificationChannel notificationChannel = new NotificationChannel(chID, chID, NotificationManager.IMPORTANCE_MIN);
//通知の説明のセット
notificationChannel.setDescription(chID);
//通知チャンネルの作成
notificationManager.createNotificationChannel(notificationChannel);
//通知の生成と設定とビルド
notification = new Notification.Builder(MainActivity.this, chID)
//.setContentTitle(getString(R.string.app_name)) //通知タイトル
.setContentTitle(pageNum + "/" + lastPageNum)
.setContentText(notificationText) //通知内容
//.setSmallIcon(R.drawable.icon) //通知用アイコン
//.setSmallIcon(android.R.drawable.ic_lock_idle_alarm)
.setSmallIcon(R.drawable.ic_stat_name)
.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false) //進捗用の通知
//.setSound(null, null) //通知音
//.setDefaults(0) //通知音
.build(); //通知のビルド
2021/02/07(日) 14:52:24.66ID:BPC0VHNi0
長文になったので、二つの投稿に分けました

通知内容は、複数のファイルをダウンロードしている間、進捗状況を出すだけで
音が鳴らなくて良いのですが、どーにかなりませんかね?
2021/02/07(日) 15:44:08.01ID:iJnVEn+R0
アプリ再インストール
2021/02/07(日) 15:59:21.62ID:HDdoYlai0
無音にできないというよりは通知チャネルに登録できてないだけではないか
2021/02/07(日) 21:41:24.93ID:BPC0VHNi0
>>883 >>884
アプリの再インストールの方法は今調べています。

参考URL;https://dev.classmethod.jp/articles/change-android-notification-sound/
>チャンネルIDが同じであるため、アプリを一度アンイストールしておきます。アンイストールしたくない場合は、チャンネルIDを変更すればOKです。

という記述を見つけたので、チャンネルIDを変えたら、音が鳴らなくなりました。
多分、アプリの再インストールで直る気がします。
2021/02/07(日) 21:59:50.57ID:BPC0VHNi0
追記
アプリの再インストール(正確には、仮想デバイス上でのアンインストールを行った)後、音が鳴らなくなりました。

ご回答ありがとうございました。orz
2021/02/08(月) 18:55:50.73ID:/lFSwbjj0
俺もちょうど1週間ぐらい前にやったとこだったからな
つか、君ひょっとしてダウンロードとかいうから他のスレでアプリどこで公開したらいいか質問したあのアプリ作ってる人か?
2021/02/09(火) 09:47:26.27ID:RW73QRA80
未キャッチ例外ハンドラ
Thread.setDefaultUncaughtExceptionHandler(・・・)
のスコープってどういう単位なのでしょう?
Serviceとか起動させる場合にはService内でも
Thread.setDefaultUncaughtExceptionHandler
を指定する必要ありますか?
2021/02/09(火) 16:14:34.80ID:5OeCwvle0
サービスを作成したときにハンドラが書き込まれているスレッドグループを指定する必要がある
2021/02/10(水) 06:31:16.77ID:kSPKrgFk0
>>887
そうです。
今はレジューム用の仕組みを作っている所ですね。

対象のサイトの評判が悪いのは知っていますが、
例えばそのサイトを利用し、収益を得て、それをうまく分配出来れば、
それも一つの手ではないかと思っています。
(前提として、自分用、勉強用ではあるんですけどね。)


もし、私の考えを理解して貰えるなら、協力をお願いしたいです。

その他の質問として、通知用アイコンが変更出来ない場合ってどんな原因が考えられますか?
2021/02/10(水) 12:26:06.98ID:il21eW8j0
通知チャンネルとか通知アイコンは簡単には変更できないようになっている
リファレンスを熟読して解決するしかない
2021/02/14(日) 08:51:23.03ID:+r5StILh0
リファレンスを熟読してみます。
2021/02/14(日) 17:56:13.57ID:+r5StILh0
ファイルを選び、読み込む仕組みを作っています。

読み込む為の仕組みとして、以下のサイトを参考に作ってみました。
https://www.hiramine.com/programming/android/fileselectiondialog.html

上記サイトのメインアクティビティクラスの実装(MainActivityクラスの実装)に書かれている

  // メンバー変数
  private String m_strInitialDir = Environment.getExternalStorageDirectory().getPath(); // 初期フォルダ

この初期ファルダを、アプリ用の内部ストレージに変えたいのですが、どうしたらいいか教えて貰えませんか?
以下の様に書き換えると起動しなくなります。

  private String m_strInitialDir = getFilesDir().getAbsolutePath();

よろしくお願いします。
2021/02/14(日) 18:21:58.82ID:+r5StILh0
あと、これは出来ればで良いのですが、

オプションメニューからファイルを選択するのではなく、アプリに用意したボタンからファイル選択をする方法
教えて頂けると幸いです。

>>891
Androidstudioで用意されている、デフォルトのアイコンを使った場合、変更されました。
多分、私が作った通知用アイコンが、Androidの基準を満たしていないのだと思います。
2021/02/14(日) 18:22:07.07ID:ZqCsi9Lc0
ブレークポイント仕掛けるとかどんな例外で落ちてるかまずは把握
2021/02/14(日) 18:25:15.06ID:ZqCsi9Lc0
Buttonビューを用意して、onClickハンドラにファイル選択のコードを移せばいいでしょ
2021/02/14(日) 18:29:55.76ID:ZqCsi9Lc0
というかその前にユーザーにファイル選択させたいなら>>893の方法は古くて、
https://developer.android.com/about/versions/11/privacy/storage
とかscoped storageとか色々自分の要件にあったものを..
2021/02/14(日) 18:30:47.54ID:ZqCsi9Lc0
https://developer.android.com/training/data-storage
2021/02/14(日) 19:14:10.80ID:+r5StILh0
>>895
private String m_strInitialDir = getFilesDir().getAbsolutePath();
を使った場合、以下のエラーがでます。

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getFilesDir()' on a null object reference

値がnullになってるのが悪いと見ているのですが、何故
private String m_strInitialDir = Environment.getExternalStorageDirectory().getPath(); では値を取得できて、
private String m_strInitialDir = getFilesDir().getAbsolutePath();  ではnullになるのかが、分からないのです。

>>896
その方向で作ってはいますが、なにぶん初心者な物で手間取っています。

>>897 898
古いのは理解しています。
私が持っている機体がAndroid8なので、まずは8(API29未満)で動いてくれる物を作り、
その後、Android10(API29)以上に対応させたいと考えています。

もし、Android8 or10で行う場合、参考サイトの記述を、どの様に改変すればいいでしょうか?
自分でも調べているのですが、なかなかうまく行かず…

よろしくお願いします。 orz
2021/02/14(日) 19:23:09.52ID:ZqCsi9Lc0
>>899
まぁ、nullポインタだろとは思ったけど、なんでnullになるんだろうね
たぶん、初期化のタイミングだな
getFilesDirをそこではなく、ActivityのonCreateメソッドに移動したらどうなる?
setContentView( R.layout.activity_main );
のあるところに
2021/02/14(日) 19:27:19.15ID:ZqCsi9Lc0
つか、飛びすぎじゃねぇか?
俺が勉強したときはButton1つ配置してボタンクリックしたらメッセージ表示してみるとか基本的なことから入ったけどなぜこんな複雑なサンプルをいきなり

レイアウトは基本xmlファイルに書く
activity_main.xmlってファイルがresフォルダのどっかにあるからそこにボタンなら<Button >みたいな要素つくる
2021/02/14(日) 19:28:25.00ID:ZqCsi9Lc0
https://akira-watson.com/android/button-onclicklistener.html
これとか
2021/02/14(日) 19:48:34.42ID:+r5StILh0
>>900
参考サイトの作りが、public class MainActivity 直下に作る様なので、それに合わせていたのですが…

onCreateの直下に
String m_strInitialDir = getFilesDir().getAbsolutePath();

を作ったら
/data/user/0/com.example.test/files

を取得出来ました

これを、FileSelectionDialogにうまく渡さないといけないのですよね
2021/02/14(日) 20:07:51.15ID:+r5StILh0
>>901
欲しい物を作る
自分が欲しいから、調べたり勉強したりで、進めるんじゃないかなぁと思ってる。

自分で使う分には問題ないんだけど、公開するなら、もっと良い物にした上で公開したい。

一応、プログラムの基本は理解してる(応用情報技術者資格は持ってる)
但し、JAVAは初心者!

よろしくお願いします orz
2021/02/15(月) 01:12:17.86ID:r1R8Fv3d0
フラグメントって必要なくね?
2021/02/15(月) 07:47:13.19ID:49WjG/of0
>>902
URLを参考に、作った所、成功しました。

ただ、突貫で作った為、細かい部分で想定外の動きをするかも知れません。
その時はまた、相談させてください。
2021/02/15(月) 08:42:07.55ID:957kb5r00
viewPagerの中身fragment入れざるをえんじゃん
2021/02/16(火) 18:48:06.81ID:8iY4m84rM
GridLayoutの子要素を追加する位置って変更できますか?
左上からではなく右下から追加したいのですが
2021/02/17(水) 15:30:02.03ID:Plux6w6X0
AndroidXなら変更できるよ
2021/02/27(土) 11:14:12.21ID:QGb+sIIj0
アプリのテスターを募集したいと思っているのですが、どこで募集すればいいでしょうか?
2021/02/27(土) 11:59:23.44ID:QGb+sIIj0
もう一つ質問です。
onClick 後の処理で、入力されたデータが希望の物に一致しなかった場合、
処理を中止する(onClickを抜ける)コマンドはどのように書けばいいですか?
2021/02/27(土) 12:01:28.68ID:reHW1VhC0
return;
2021/02/27(土) 12:04:26.93ID:MjavZayY0
友人知人に頼む
SNSで募集
クラウドソーシング等で有料で募集

if文にして条件に合わなければ処理しないようにすればいいよ
2021/02/28(日) 14:03:53.32ID:2DSRaDXz0
>>912 >>913
ありがとうございます。試してみます
2021/02/28(日) 15:10:58.27ID:2DSRaDXz0
>>912 >>913
return; でいけそうです。ありがとうございます。

>>913
友人、知人にAndroidを使っている人が少なく、また使っている人もアプリ開発に詳しい方ではないので、頼む事が出来そうにありません
SNSはこれまで利用して来なかったので、繋がりが全くありません
クラウドソーシングを確認した所、費用が月10万+かかる様で、小規模な開発を目指している私の予算に合いません

ここで募集するといった事はどうでしょうか?(5chは一種のSNSの様な物と考えてます)
2021/02/28(日) 18:24:19.71ID:0bJ/dwd80
ベータ版でストアに公開でもいいと思うよ
ベータ版でも製品版でも最初は誰もDLしてくれないから。。。
2021/03/01(月) 02:35:11.77ID:27ATkQeN0
>>915
考えて実行しないよりまず公開をめざそうぜ!オープンβでもストア公開でもいいから。
スレ住民がいくら優しくても、モノも構想も出せない状態では募集もなにもそんなお人好しはいないからね。
2021/03/01(月) 23:51:30.39ID:Ntd3N/hT0
内部テストというのをやってみましたが、これで良いのかよく分かっていません。

e-hentaiに特化したダウンローダー:
https://play.google.com/apps/internaltest/4700364722824014155

機能は、ehgm.plと言う物の下位互換です。

URL はダウンロード対象のIndexページのアドレスのみ対応してます
https://e-hentai.org/g/xxxxxx/xxxxxxxxxx/

対象としているサイトが、あまり行儀の良く無いサイトである事は承知していますが、
協力頂けるのであれば、意見を受け賜れると幸いです。
よろしくお願いします。
2021/03/02(火) 09:16:28.49ID:CA/md18K0
テスターにメールアドレス追加しないと駄目だろ
deploygateの方が良いんじゃない
2次元バーコード読み取るだけでインストールできる
2021/03/03(水) 11:20:45.04ID:aNER/9350
これだとメアドをどうにかして収集して追加するところからだから、オープンβにするかdeploygateがいいね
2021/03/03(水) 12:33:33.41ID:cKCbT4+r0
deploygate 使い方まだよく分かっていませんが、上げてみました

https://dply.me/4rrsaa

これでいいんでしょうか?
2021/03/03(水) 13:07:58.79ID:qf1rSl260
テストしてやるとは言ってない
2021/03/03(水) 13:31:06.10ID:cKCbT4+r0
>>922
無報酬でテストして貰うのだから、別の形でテスターの方にメリットを提供出来れば良いなと考えてます。
どんなメリットがあればテストしてくれます?
2021/03/03(水) 13:32:40.50ID:yjV9atCA0
依頼は他所でやれ
2021/03/03(水) 13:42:54.10ID:cKCbT4+r0
>>924
話の流れで、この様な形になっています。

>依頼は他所でやれ
どこでやればいいですか?
2021/03/06(土) 21:20:45.85ID:w+6E5OyeM
ランチャーアプリ作ってるんですが、ブラウザからウェブページのショートカットがホーム画面に追加された時の情報ってブロードキャストでキャッチできますか?
レシーバーにACTION_CREATE_SHORTCUTとか追加しても情報が飛んでこないので。分かる方教えてもらえるとありがたいです!
2021/03/17(水) 02:16:34.13ID:slPPJ4Z70
EhViewer というアプリを参考に、あらたなアプリを作ってるんだけど
(EhViewerの配布元:https://github.com/seven332/EhViewer/releases

こいつがどうやって、サーチ&表示してるのか分からない。
誰か分からん?
なんとなく、自前のDB作ってそこを使ってやってそうっぽい?
2021/03/17(水) 08:43:03.19ID:GVUsYX0l0
ソースコード公開してるんだから自分で確認すりゃいいでしょ
2021/03/17(水) 16:56:35.97ID:slPPJ4Z70
それが出来ればいいんだけど…
余力ある人に教えて欲しい
2021/03/17(水) 20:22:23.18ID:y3TGLyIf0
親分てーへんだ
2021/03/24(水) 01:32:49.44ID:1qXI0SVe0
Sony系のエミュレーターって今じゃ手に入らないんですか?

また、Sony系のスマホでフォルダ作成を行った場合エラーが出る様なのですが、
原因や解決方法分かる方いませんか?
2021/03/24(水) 18:49:17.67ID:G8d0xKyZ0
>>931
自分が作成・公開してるアプリで、Google Play Console の Android Vitalsの
「障害およびANR」を見ると、月に1〜2件の頻度でANRが報告されているのだが、
その殆ど(多分9割以上)がXperia(機種は色々)で、そのmainスレッドの一番上
には大抵ストレージアクセス系のnative関数になってる。

Xperiaは低品質のストレージ使ってるか、Sony独自のコードに何かバグがある
のかねえ?
2021/03/24(水) 18:55:01.60ID:abEcFnZFM
IT後進国の企業が作ってる糞コードなんか糞に決まってるだろ
2021/03/24(水) 19:11:10.86ID:G8d0xKyZ0
>>931
あと、Xperia での話ではないが、初回起動などでContext#getFilesDir()で
フォルダが新規に自動作成される時、作成直後はフォルダ内への書き込みに失敗
する場合があるようなので、書けるかテスト・ダメならちょっとSleepしてリト
ライするようにしてる。
2021/03/24(水) 20:49:24.04ID:tdvrnxfw0
MVVMって基本的にActivity一つに対して対応するViewModelを一つ作るんだと思うんですけど
RecyclerViewのadapterの中で使うレイアウトファイルにセットするViewModelは
それ専用のを作るのかActivityに対応するViewModelをセットするのか
どうしたらいいんですか
2021/03/24(水) 21:04:36.89ID:qJXpnSlY0
俺はそのまんま表示するものに対しておとしこんでる
Activityに対してActivityのViewModelがあって、このActivityがItemの一覧をRecyclerViewなりで表示するなら
ItemのViewModelのListをActivityのViewModelが持つ
2021/03/24(水) 21:06:29.20ID:qJXpnSlY0
class ActivityViewModel {
 List<ItemViewModel> itemViewModels
}
こんなイメージ
2021/03/24(水) 21:48:24.09ID:tdvrnxfw0
なるほどviewmodelで親子関係を持つんですね
その場合に、子のviewmodelから親のviewmodelへアクセスしたいとかその逆みたいなことってありませんか
callback とか livedata の observe とか駆使して
子の viewmodel -> adapter -> activity -> 親の viewmodel
とか経由しないといけないと思うんですけど
その辺の煩わしさを感じて結局viewmodelは一つがいいんじゃないかとか
思ってしまうんですけどどうなんでしょうか
2021/03/24(水) 21:49:24.21ID:tdvrnxfw0
子の viewmodel から 別の子の viewmodel とかもアクセスし辛いじゃないすか
2021/03/24(水) 22:00:30.15ID:qJXpnSlY0
androidではその場合は親のViewModelも一緒にRecyclerViewに渡してる

本当は子が親の参照持つべきなのかもしれんが、そうすると子が他で使いまわしづらくなるので
2021/03/24(水) 22:04:16.43ID:qJXpnSlY0
DataBinding使ってるか知らんが、androidのDataBindingは変数いくつでも宣言できるからこれでいってる

xamlとかWPFとかでのMVVMだと、DataContextって言って変数が一つしか割り当てれないから、めんどくさいんだけどね
2021/03/24(水) 22:09:29.49ID:tdvrnxfw0
この辺がやっぱ何かもやっとしますよねえ
2021/03/24(水) 22:14:25.58ID:qJXpnSlY0
俺はMVVMギチギチにやるなら、親の参照を持った専用のItemのViewModel作るけど、そんな完璧にやってもめんどくさくなったりするからそこら辺は自分の適当なさじ加減で
2021/03/24(水) 22:38:45.09ID:qJXpnSlY0
例えば、Twitterアプリ考えて、たいてい一覧画面と詳細画面あるけど、
Tweetを表すTweetViewModelはまとめて両方で使えるように
で一覧画面の
TweetsViewModel {

}

TweetDetailActivity {

}
2021/03/24(水) 22:41:07.57ID:qJXpnSlY0
// 一覧
TweetsActivityViewModel {
 List<TweetViewModel> tweetViewModels;
}

// 詳細
TweetDetailActivityViewModel {
TweetViewModel tweetViewModel;
}
TweetViewModelをどっちでも使いまわしたいからとりあえず、TweetViewModelには親の参照を持たせずに・・
まぁ、適当でいいんじゃねw
946デフォルトの名無しさん (ワッチョイ 8110-oXDN)
垢版 |
2021/03/25(木) 22:43:44.56ID:1ZcQUKKu0
webviewってアプリ側に悪意があったら情報取られますか?
例えばLINEのQRコード読み取りで開いたサイトはChromeではなくLINE内のブラウザで開かれると思いますが、この場合URLだけでなくにcookie等も取得できてしまいますよね?
2021/03/27(土) 15:02:20.37ID:+36ivnm+0
>>932
色々調べてみて貰ったんだけど、原因はAndroid10の可能性が高い
たまたまSony系を使ってる人がAndorido10を使ってたからエラー出てたみたい
2021/03/27(土) 18:52:50.77ID:OFcvctcZ0
いーやお前が悪い
2021/03/30(火) 16:28:47.84ID:SN6IzqgC0
アプリからダウンロードフォルダのパスを取得する方法についての質問です。

API28(Android9) 以下の場合:
File dataDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

API29(Android10) の場合:
マニュフェストに android:requestLegacyExternalStorage="true" を追記
File dataDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

API30(Android11) の場合:
 どーしたらいいのか分かりません。

Environment.getExternalStoragePublicDirectory が API29で使えなくなったけど、マニュフェストを弄ればなんとか使える
API30 でそれも許されなくなって、どうやってダウンロードフォルダのパスを取得したらいのやら教えて欲しいのです。

よろしくお願いします。
2021/03/30(火) 16:35:50.63ID:blrMEvRh0
contentResolverじゃね
2021/03/30(火) 17:35:42.83ID:SN6IzqgC0
>>950
contentResolver を調べてみたのだけど
>アプリが作成していない MediaStore.Downloads コレクション内のファイルにアクセスする場合は、ストレージ アクセス フレームワークを使用する必要があります。
>参考URL:https://developer.android.com/training/data-storage/shared/media?hl=ja
API30(Android11) の場合ストレージ アクセス フレームワーク(SAF)を経由しないとダウンロードフォルダのパスを取得出来なくなってるのでは?



初めてAndroidアプリを作ってます。
アドバイス(出来れば具体的に)お願いします。
2021/03/30(火) 17:51:03.21ID:tA63+zJpM
もうストレージアクセスフレームワーク使わないと駄目なんじゃないかね
2021/03/30(火) 18:02:28.01ID:tA63+zJpM
API29対応して放置してるアプリがあるんだけど、pixel4aのAPI30で動かして見ると、SAFを通してならばダウンロードファイル全部見えてるぽい
scoped storage 経由だとなんか一部しか見えない
2021/03/30(火) 18:09:11.42ID:tA63+zJpM
API29対応するときに、SAFかscoped storageだけしか見ないようにした
ファイルパスを入手するのでは無くて、ContentResolver::openFileDescriptor使ってファイル見るようにしたと思った
2021/03/30(火) 18:23:05.54ID:tA63+zJpM
この辺見て頑張りたまえ

データ ストレージとファイル ストレージの概要
https://developer.android.com/training/data-storage?hl=ja
対象範囲別ストレージ
https://developer.android.com/training/data-storage?hl=ja#scoped-storage
Android ストレージのユースケースとおすすめの方法
https://developer.android.com/training/data-storage/use-cases?hl=ja
Android 11 でのストレージに関する更新
https://developer.android.com/about/versions/11/privacy/storage?hl=ja
Android 10 との互換性を維持する
https://developer.android.com/about/versions/11/privacy/storage?hl=ja#maintain-compatibility-android-10
2021/03/30(火) 18:26:02.66ID:oe3FBI0+M
ファイルパスはもう見れないんじゃね
2021/03/30(火) 20:02:06.80ID:SN6IzqgC0
沢山のアドバイスありがとうございます。
頂いたアドバイスの内容を調べ、勉強させて貰います。
2021/03/31(水) 19:07:15.63ID:lwtQ5GkB0
自分はちょっと特殊な(工場で使うような)ファイルのビューアを作ってます。
やっぱりAPI30のファイルアクセスで悩んでいて、ファイル形式が一般的でなくて拡張子で種類を判断していたけど、これからどうしたものかと。
別のアプリはSAF使ってファイル選択後に種類判断したけど、関係ないファイルが表示されるし、選択ミスもあるしで使いにくいったらありゃしない。
また別のアプリはフォルダ下にある複数のファイルが必要なのでどうすりゃいいんだろ?
2021/03/31(水) 20:15:04.48ID:thzCmkYw0
Googleの手数料が15%になるってことはAdMobの広告収入が今までより20%くらい増えるってことなん
2021/03/31(水) 22:20:02.61ID:tw4xdBq70
>>958
SAFのUIでファイルを指定させるのではなくて、フォルダを指定させることができる
アプリは指定されたフォルダ以下の階層のファイルやフォルダへのアクセス権が貰えるので、ファイルの一覧を自分で取得して選択リストを自前で表示すればいい
ただ面倒なのは、ファイルの一覧の取得やファイルへのアクセスには、SAFの独自関数を使用する必要がある(はず)で、JavaのFileクラスやLinxuのシステムコールではアクセスできない(と思う)
ユーザによるSAF UI上でのフォルダの指定は、最初に一度やって貰えば、アプリ側でそれを保存しておける
2021/03/31(水) 22:40:30.10ID:lwtQ5GkB0
>>960
ありがとうございます。調べてみます。
2021/04/01(木) 00:20:57.77ID:Ht+Na1Lt0
本当にパスが必要ならスーパー権限要求すればいいだけ
MANAGE_EXTERNAL_STORAGE
ストア経由しなければこれでもいいし、ストアで配布すると審査厳しくなるのだろう..
2021/04/05(月) 15:00:44.26ID:QlQVv+Ua0
開発中のアプリを見せた際、マテリアルデザインのテンプレートを使った開発を行った方が良いとアドバイスを受けました。
なので、マテリアルデザインについて勉強中なのですが、

皆さんは、どのようにデザインを作られていますか?
また、マテリアルデザインのテンプレートのお勧めなどありますか?
2021/04/05(月) 16:26:47.46ID:0tu2RPBZ0
アプリ更新して40時間ぐらい経つのにまだ審査中なんだがなにやってんの
2021/04/05(月) 18:18:00.71ID:08wdQHfO0
>>964
アンタのアプリを待ってる人なんか誰もいないから気にすんな
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況