Androidプログラミング質問スレ revision54
■ このスレッドは過去ログ倉庫に格納されています
入力中の「とう」を「東」と判定はできないけど、そこはまだIME側の対応だろうと考えます。 >>358
ありがとうございます
求めていたものでした OreoからBroadcastReceiverでNEW_OUTGOING_CALLが捕捉出来ない時があるんだけど
自分のXperiaだけなのかな? 時間置いた後の1回目が捕捉出来ない事がある
その後は使えるけどDozeが絡んでるのかな メーカーがカスタマイズした省エネモードとかやっかいだよな
結局ホワイトリストに入れてもらうしか対処がない OS設定の省電力機能の対象外にする設定のある場所とか
HuaweiとかASUSの省電力、自動起動設定とか
普通のユーザーに分かる訳ないと思うんだけどなぁ
Googleにとってはこれを乗り越えられない開発者はいらないって事なのか グーグルのエープリールフールがしっかりと動作してやがる 余計なことしてないで本業をだな Android6.0で実機デバッグをしています。
アプリをFLAG_KEEP_SCREEN_ONで常に画面表示でずっと動かしてると、
たまーにアプリがホームボタンを押したのと同じ状態で隠れている状態になる時があります。
実際画面も点きっぱなしなので、右下のメニューボタンを押すとアプリがあり、エラーも無く動きます。
この場合はどんな原因があって、アプリが隠れてしまうのでしょうか?
(WiFiなどはOFFにして、他のアプリは特に動作した形跡も見られません。) MainActivity#onCreate()、onResume()、onWindowFocusChanged()にて以下でナビゲーションバーとステータスバーを非表示にしています。
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
1.アプリ起動時にナビゲーションバー、ステータスバーが一旦表示されフェードアウトして隠れるのですが、隠れる動作をなくす(最初から両方のバーが隠れている)よう方法はありますでしょうか。
2.オプションメニューやスピナーをタップすると、両方のバー半透明の黒でなく通常の黒状態で表示されますが、抑制する方法はありますでしょうか。
https://developer.android.com/training/system-ui/visibility.htmlを参考にView.OnSystemUiVisibilityChangeListenerに上記を組み込みましたがうまくいきませんでした。 そこはOSバージョンによって挙動が変わったりして面倒臭い >>368
2.は俺も前やったな。通常のメニュー表示すると、没入モード解除されて回避方法ないような気がする。
だから、メニュー使わずにダイアログフラグメント使ってメニューっぽく仕上げて回避したな。俺は。
ダイアログフラグメントも普通に表示すると、没入モード解除されるから
フラグ設定して表示すればよかった。
ほんとAndroidはクソすぎて嫌になるわ。 Activityがバックグラウンドになった時、フォアグラウンドに復帰させる方法ってありますか?
調べても検知するだけで、復帰方法までは見つからなかったので質問させて貰いました。 バックグラウンドになった瞬間にアクティブにするってどんなゾンビですか >>372
そんな事アプリが勝手にやったらウイルス作れちゃうじゃん
根本的なUIの改善を考えなされ >>373-374
確かに暴走した時にキル出来なくて、
スマホの再起動くらいでしか戻れない迷惑なアプリですよね・・・
考え直してみます なんかここで質問されるのって普通じゃ思いつかないような変な使い方が多いような気がする笑 普通の使い方ならば質問してないでgglksとか言われて終わら
されるような気がするので正しく機能しているということではw
ただ普通の使い方がAPIの更新という名目の元に毎年
ドラスティックに変更されてしまうので付いていけないというか
付き合いたくないってのはあるかな・・・ Gradleってなんでオンラインじゃないとだめなんだろ?
なにしてるんだろ、まさかこちらのソース送ってるとかないよね mavenからダウンロードしてるからだろ
オフラインでも使えるぞ >>373-374
考えてみたけど、思いつかなかったです・・・。
症状としては、数時間後にアプリが勝手にバックグラウンド(ホームボタンを押した状態)に移動してしまい、
隠れてしまうのを回避したいです。
根本的な解決だと移動する原因を突き止めることなのでしょうが、
アプリが勝手に隠れる原因って何でしょうか?
アプリはFLAG_KEEP_SCREEN_ONで常時画面ONにしていて、
他にアプリが起動した様子は無く、WiFiも切っています。 >>382
電池の最適化から除外してもそうなるの? >>382
そのフラグって起動している間は画面をオフにしないってだけでは?
常時そのアプリをアクティブにするものとは違ってたかと >>383
ホワイトリストには入れて無かったです。
>>384
画面ONで他のアプリが動かなければ、常時アクティブになるのかなと思ってました。
ゾンビ化させるつもりで、onPause()の時にonResume()を呼び出してみたけど、ダメでした。
@Override
protected void onPause()
{
super.onPause();
onResume();
} >>385
ならそのアプリを最適化から除外した上でどうなるか確認しよう。 ありがとうございます
確かに電池の最適化なんて何やってるかわからないから、
まず除外して動かしてみます 普通は勝手にバックグラウンドには行かないし、スリープ復帰後もフォアグラウンドのままだし
その端末がスリープに入るとアプリがすべてバックグラウンドに行く仕様とか
(それも変な仕様だけど。または変なアプリが入ってるとか) クラッシュしてるんじゃ?
バックグラウンドに行く原因を特定するほうが先だと思うが startForegroundServiceでレシーバー常駐させてても
受信しない事あるんだが… フォアグラウンドサービスはかなり殺されにくくなるだけで
絶対に殺されないものではないけど
途中で殺されてたりしない? Logcatか何かで分かるのかな?
分かってもどう対策すればいいのやら… google playで公開しているアプリのユーザーが、
とても良いアプリだからdonateしたいんだが的なことを英語のメールで送ってきたんですが、
非消費型アプリ内課金でdonate機能を付けることは問題ないんですかね
つまり、何も機能追加とかはしないけど単にお金を貰うだけということになるんですが もしくはそういう機能のあるアプリって既にgoogle playで公開されてたりしますか google的には30%の手数料収入が入ってくるわけだから禁止する理由もないのかな >>395
課金含めて作成したことはないですが、ずっと使ってるghost commanderって無料のファイラーにはdonation機能ありますね。
paypalに遷移するのでgoogleに一部落ちるってことはないのではないかと思われますが。
https://i.imgur.com/JHl7KIs.png
https://i.imgur.com/9Mwcvgu.png アプリ内課金までGoogleに取られたら堪らないな あーgoogleに手数料取られない形のアプリ内課金もあるんですねー とりあえずdonate機能追加したわ。これで大金持ちやな そういえばGoogleは寄付と課金は別に考えてたな ブログとかwebサイトでも作ってそこにdonate機能つけて、アプリからそこにリンク貼ればいいんじゃね Googleは10%じゃなかったっけ?
リンゴと窓が30%で。
10%でも高すぎると思うんだけさぁ。 AndroidStudio 3.0.1を使用しています。
Android Profilerにてメモリ使用量を確認したところ、「Native」が開始直後は10MB程度から、数時間後に160MBまで増えているところまではわかりました。
ただ、このNativeの何が増えているのかはわかりませんでした。
([Dump Java heap]で開始直後と数時間後を比較すると、FinalizerReferenceやbyte[]は1.5倍程度にしか増えていませんでした)
この場合、何を見れば良いのでしょうか?
よろしくお願いします。 画面はこんな感じです。
http://fast-uploader.com/transfer/7078879864621.jpg
Retained Size 49248559Byte ≒ 47MByte 使用ってことでいいのかな?
ただ上のグラフだとNativeが増えて、Total 192MBのメモリを使用しているけども。 >>393
>>396
俺も似たようなレビューを数件貰ってたから、広告非表示や機能追加で課金を検討してたけどPayPal経由で寄付実装なんてのもあったのか
Googleに怒られるかと思ってた Android Studioで大きな画像を表示してピンチイン・アウトをしたいと思い、
https://qiita.com/satoshinew/items/a5fa3711d76429159dcb
これを使いたいのですけど説明の意味がわからないので解説してください。
(Android Studioの設定は完了して「Hello World」の文字は表示されてます)
まず、導入の方法は2つあるようです。
「ライブラリプロジェクトをインポートする」場合、
https://github.com/satoshinew/GestureTransformableView/tree/master/GestureTransformableView
このページのどれをどうすればインポートできるのでしょうか?
「gesturetransformableview.jarを直接libsに突っ込む」場合
https://github.com/satoshinew/GestureTransformableView/tree/master/GestureTransformableViewSample/libs
このページには「android-support-v4.jar」「gesturetransformableview.jar」「picasso-2.2.0.jar」
と3つのjarがありますが
「gesturetransformableview.jar」だけをクリックして次の画面でダウンロードすればいいのでしょうか?
(ちなみに、Picassoというのは大きな画像を取り込める機能をもつライブラリ?のようですが
このPicassoも使いたいと思ってます。
このページにある「picasso-2.2.0.jar」をDLして突っ込むとPicassoも使えるようになるのでしょうか?)
そして次の
------------------------------------------
xmlで宣言する場合は 〜 (コード) 〜
直接書いちゃう人は 〜 (コード) 〜
------------------------------------------
についてですが
「xmlで宣言する場合」というのは「activity_main.xml」のところに書けばいいのでしょうか
「直接書いちゃう人は」というのは何をどこに直接なのでしょうか
よろしくお願いします。 >>409
ライブラリプロジェクトのインポートやlibsやjarについて
詳しく書いてある本教えてください。
>>410
こんな短期間でやり方変わっちゃうんですか? 公式に書いてあるんだからまずはそれを読むこと
そして4年は短期間ではない そもそもAndroid Studioじゃないんじゃねえの
4年前に最新のeclipaeでやったらうまくいくかもよ Androidの世界で短期間ってせいぜい半年くらいじゃないの みなさんありがとうございます
広大なマップの上を移動していくゲームのように
大きな画像を無劣化で取り込みたいです
普通にimageviewで入れると勝手に小さくリサイズされて荒くなるけど
リサイズなしで取り込むにはどうしたらいいでしょうか
経験ある方教えてください
https://developer.android.com/studio/intro/index.html
この公式のガイド見てもよくわからないです 画像全体のサイズにもよるけど、簡単なようで難しいのでないか 端末画面のサイズ超えそう
それよりメモリオーバーしそう 画像を表示させるだけでいいならBitmapRegionDecoderで必要な範囲だけ読み込む
それを元にゲームを作るのなら最初からゲームエンジンを使ったほうがいい Android ProfilerのMEMORYを見ていると、
GC発生毎にNativeが20〜50Byteほど増えるのですが、
GCの発生回数カウンタみたいな物はあるのでしょうか? >417
エスパーしてリソースフォルダから読み込んでるとするとnodpiフォルダを作って
そんなかに入れとけば拡縮されないよ ASで新規プロジェクトでMapを選んで作成した場合
build.gradleで
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.google.android.gms:play-services-maps:12.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
'com.android.support:appcompat-v7:27.1.0'の部分に赤の破線が出てしまいます。
通常のプロジェクト作成で自分でimplementation 'com.google.android.gms:play-services-maps:12.0.1'を
追加した場合も同じです。 エラーの内容の詳細を見ると次のようになっています。
All com.android.support libraries must use the exact same version specification
(mixing versions can lead to runtime crashes).
Found versions 27.1.0, 26.1.0. Examples include com.android.
support:animated-vector-drawable:27.1.0 and com.android.support:support-media-compat:26.1.0.
There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs.
One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion).
すべてのcom.android.supportライブラリは、まったく同じバージョン仕様を使用する必要があります
(バージョンを混在させるとランタイムクラッシュにつながる可能性があります)。
バージョン27.1.0、26.1.0が見つかりました。 例にはcom.androidがあります。
サポート:アニメーションベクタ描画可能:27.1.0、com.android.support:support-media-compat:26.1.0。
互換性がない、またはバグにつながるライブラリやツールやライブラリの組み合わせがいくつかあります。
このような非互換性の1つは、Androidサポートライブラリの最新バージョン(または特にtargetSdkVersionよりも低いバージョン)ではないバージョンのAndroidサポートライブラリでコンパイルされています。
特に26.1.0を指定した記述もしていないのになぜこうなってしまうのでしょうか?
環境構築になにか問題があるのでしょうか?
どうすればこの赤破線は消せますか? AS3.0でプロジェクト新規作成したみたが26で作られて特にエラーはでないな
AS3.1は糞だからゴミ箱に入れてAS3.0でやり直したらいいんじゃね AS3.1.1で試してみたが確かにエラーがでるね
appcompat-v7:26.1.0に変えて、compileSdkVersionとtargetSdkVersionを26に変えればいいんじゃね 自作ホームアプリを起動したあとに他のアプリから呼び出すとactivityが二重に起動してしまいます。
launcherModeはsingleTaskに設定しているのですが、原因がわかりません。
どなたか原因わかる方いるでしょうか? >>425
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.google.android.gms:play-services-maps:12.0.1'
の依存でコンフリクトが起きているようで上にあるよう26に戻すか、オレのアプリは特にクラッシュしないので特に気にしていない >>429
それらを26にして破線を消すことができました
ありがとうございます
実機で実行した時になぜかクラッシュするようなので3.0を入れて試してみます AS3.1が出たばかりで初心者にはタイミングが悪い ASの所為でもなく、敢えて言えば個々のライブラリが悪い。
けれど、この手の問題は良く発生するから、
implementation 'com.github.bumptech.glide:glide:4.6.1', {
exclude group: 'com.android.support'
}
という逃げ方があるのは覚えておく。 カウンタを時間に変換したいと思っていますが、
SimpleDateFormat():スレッドセーフでは無い
String.format():すごく遅い
複数スレッドでたくさん時間に変換したいので、スレッドセーフかつ速い変換って何が良いのでしょう?
ググってもデメリットの説明ばかりで、代替え案が出てこないので教えてください。 Dateは確かにmutableだけど、DateFormat使うに当たってスレッドセーフが必要なケースってあるか? 非同期処理の確認でSystem.nanoTime()で、実行時間を見てます。
この為に同期処理にってのもナンセンスですし・・・。 いやいやw
その処理のどこにスレッドセーフが必要ですか? activityのintentfilterにcategory.launcherとcategory.homeを設定しているのですが、ホームボタンから起動される時と他のランチャーから起動される時でactivityが複数起動してしまうのですが、単一のactivityとして起動させるにはどうしたら良いでしょうか?
playstoreの他のホームアプリをいくつか試したところ同様の現象が確認出来ました。いい解決方法わかる方いたら教え下さい。宜しくお願いします。 >>446
singletaskに設定してますが、二重起動してしまいます。他のmodeも全て試しましたが駄目でしたね… サービスが寝ないようにするにはインテントをずっと投げ続けてあげないと駄目なのかなぁ アプリをユーザに終了させないにはどうすればいいんですか?
安居酒屋にある、タブレットで料理を注文する端末のようなものを作りたいんです
一つの技としてホームアプリにしてしまう方法があるようですが、それ以外の方法があれば教えてください DroidKaigi 2018 - Kioskアプリと端末の作り方 / tomoya0x00 [JA]
ttps://www.youtube.com/watch?v=ofUJaIiaVlw&t=1191s WearとPhoneのデータのやり取りでイベント(onDataChanged)でのデータ取得は
できているんだが…
データを自分から取りにいくために
dataItems = Tasks.await(Wearable.getDataClient(context).getDataItems());
を試してみたらうまくいかなかった
データ(キー)は複数あるんだが、1つしか取得できない状態
どうすればいいんでしょ? iPhoneは使ったことないので知らないのですけど
Androidアプリってなんであんなに更新頻度が高いんですか?
あれは明らかにパケット消費増大の一因になってますよね
更新頻度が高いGoogleが目立つというのもあるのですけど
Google以外のアプリケーションもそれなりの頻度です
プログラマー視点からみてアプリケーションの更新のしやすさとかがあるのでしょうか? 実際の判断は違うかもしれないけど
素早いリリースを繰り返すことでバグが含まれていたとしても問題になる前に対処できるから
もちろんテストをしないって意味ではないけど iOSだと審査あるから念入りにテストしてアプデするけど
Androidだと審査ないから結構気楽にアプデしちゃうのではないかと
昔ろくにテストせずアプデしたらすぐにバグが見つかって次の日アプデとかよくやったわ ■ このスレッドは過去ログ倉庫に格納されています