Android開発質問スレ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
↑スレ立て時は1行目と2行目に「!extend:checked:vvvvv:1000:512」をコピペして立てて下さい
荒らし対策のために強制コテハン表示&コピペミス防止
http://info.2ch.net/index.php/BBS_SLIP
Androidの開発全般に関する質問を扱います。
以下のスレが荒しによって機能していないのでワッチョイつけたスレ立ててみます。
上手くいきますように
Androidプログラミング質問スレ revision51 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1457303564/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
9YNLV Google Play Consoleで、「有効なインストール数」がいきなり1.5倍になったのはオレだけ?? 今日は一気に減った。
総インストール数は見れないしGoogle何してるん Nougatで署名の異なるAuthenticator(AccountManager)使えてる人います? ProgressDialogを非同期処理後のあとに処理を挟んでから閉じたいんだけど、多分Thread.join()でメインスレッドが止まってしまってProgressDialogが表示されないんですがなんか方法ありますか?
こんな感じなんですけど
public void onClick(View p1){
ProgressDialog progres = new ProgressDialog(activity);
progres.setMessage("読み込み中...");
progres.show();
Thread thread = new Thread(new Runnable(){
@Override
public void run(){
なんか処理
}
});
thread.start();
try{
thread.join();
}catch(Exception e){}
なんか処理
if((progres != null) && (progres.isShowing())){
try{
progres.dismiss();
}
}
} >>247
その最初の"なんか処理"がUIいじってる処理じゃない?
ProgressDialogと"なんか処理"のUIスレッドがバッティングするから
順番的にProgressDialog表示→ProgressDialog非表示→非同期終了
になって表示されてないように見える
AsyncTaskとか試したけど結局UIスレッドはシングルスレッドだから無理だった
RxJava使えば解決できるのかな? >>250
なるほど
確かに処理でHandrerPost使ってUI弄ってた
でもそれ省いてsleepで待たせてみてもなぜか表示されないな
RXjavaっていうのならできるのか val dialog = ProgressDialog(this)
dialog.show()
disposable = Observable
.interval(5, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
dialog.dismiss()
disposable?.dispose()
}) RxJavaもいいけど、まずThreadの基本的なことは知った上でないと。
>>247
何が悪いか自分でほぼわかってんじゃん。
>>250
大間違いもいいとこwww
・メインスレッドでの、join()は厳禁(ANRを引き起こす。)
・別スレッドからUI処理を行うにはHandlerを経由する。
handler.post(()->{ UI処理 }) メインスレッドでjoinしちゃいけないんですね
みなさんありがとうございました
勉強し直します 10msec単位で精度重視の定期処理タイマーを使うとしたら、
何が一番良いんでしょう? >>256
Threadでぶん回すしかない
でも10msだと他の処理(やアプリ)によっては辛くなるよ
よってthreadとタイマー(時計)をうまく使いこなせ >>257
ありがとうございます。
作りたいのはメトロノームみたいな感じで、中の処理は10ms以内に終わる程度なんです。
そのかわりに速度が出来るだけ正確で、速度を任意に変更させたいと思ったら、
意外と難しくて悩んでました。 なんかちょくちょくズレた回答するやつがいるな。
ScheduledExecutorServiceには、scheduleAtFixedRate()かscheduleWithFixedDelay()があり、
RxJavaだと、それぞれinterval()、timer()に相当する。
FixedRateとFixedDelayの動作の違いは自分で確認。 正確に行うにはscheduleAtFixedRate()だと思うのですが、
間隔を再設定するにはどうしたら良いのでしょう?
下記コードだと、点滅速度がどんどん早くなる一方でした。
View _viewMain; // 表示ビュー
ScheduledExecutorService _service = Executors.newSingleThreadScheduledExecutor();
int _Color;
private void SpeedChange(final Long lngMs) {
// _service.shutdownNow(); // 一度止める・・・と、アプリが停止する
_service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
_Color += 8;
if(_Color > 256)_Color = 0;
_viewMain.setBackgroundColor(Color.rgb(_Color, _Color, _Color));
}
}, 0, lngMs, TimeUnit.MILLISECONDS);
} そのlngMsログに出してみた?
たぶんそこの値が変 ProgressDialogはAPI level 26でDeprecatedになってるから気を点けなよ UI操作する重い処理の前にProgressDialog表示だけど、
Handler().postDelayedで遅らせるとくるくる回るやつが出るけど
遅らせた分だけくるくる回ってUI操作する重い処理に入ると
くるくるが止まったままになる
だけど、Oreoの端末だと重い処理が終わるまでくるくる回ったままで
思った通りの動作になるんだよな
この辺改善されたのかな >>258
いっそのこと100fpsの動画再生すりゃいいんじゃね 画面サイズから計算してパーツの配置を行なっているのですが、
getDefaultDisplayのgetMericsやgetSizeを行うと常にナビゲーションバーを除いた数値しか取得できず、
ナビゲーションバーの表示/非表示で位置を調整することができません
ナビゲーションバーの表示/非表示を取得する、またはナビゲーションバーの表示/非表示を考慮した画面サイズの取得をする方法はないでしょうか?
ナビゲーションバー以外のサイズを取得したく、非表示の場合は画面全体サイズを手に入れたいです >>265
>ナビゲーションバー以外のサイズを取得したく、非表示の場合は画面全体サイズを手に入れたいです
イコール 一番外のFrameLayoutのサイズでは?
>ナビゲーションバーの表示/非表示を取得
View#getSystemUiVisibility
>画面サイズから計算してパーツの配置を行なっているのですが、
機種・Androidのバージョンによっては、音量Up/down・USB抜き差しでもアプリの
画面サイズが変わるから、その方法は破綻するよ xml以外でレイアウト配置するのはマジでやめたほうがいいよ でもそうしないとダイナミックなコンテンツは作れない >>267
ナビバーの表示状態とサイズはこれで取得できるんじゃないか
Display disp = getWindowManager().getDefaultDisplay();
Point p1 = new Point();
Point p2 = new Point();
disp.getRealSize(p1);
disp.getSize(p2);
if(p1.y != p2.y){
//ナビバーが表示されている
}else{
//ナビバーが表示されていない
} Handler().postDelayedって、
Delayed指定時間毎に実行されるのでは無く、
処理時間+Delayed指定時間を繰り返すってことで良いのでしょうか? postDelayedそのものにループする機能はない。
postDelayedを再帰させてループにすることはできる。 final Handler handler = new Handler();
final Runnable r = new Runnable() {
@Override
public void run() {
何かの処理();
handler.postDelayed(this, 1000);
}
};
handler.post(r);
この場合の時間は、何かの処理() + postDelayed(1000) ってことなのかな? 再帰の形になってるから、
なんかの処理+1000ms
が、延々と続くね。 Oreoでフォアグラウンドサービスを起動して放置しておくと
Doze→Deep Dozeに遷移してスリープしちゃうから
AlarmManager#setExactAndAllowWhileIdleで10分おきに
意味のないBroadcast投げて疑似ウェイクアップさせてるんだけど
ファーウェイの端末だと全然効果ないみたい
ファーウェイの設定でバックグラウンド起動許可しても何しても
数回かに1回はスリープ入ってしまって肝心な時に動かない
これどうすれば回避出来るんだろう?
常に起きてるフォアグラウンドサービスという作りが悪いのかな? >>274
何かの処理()の時間を計測して、
postDelayed(1000 - 処理時間)
ってした方が良いのですね。
ありがとうございました。 >>276
一定周期で実行したいならscheduleAtFixedRate
どうしてもHandlerを使いたいなら、「何かの処理();」の前に「postDelayed();」 >>275
バッテリーの最適化しないの方にもアプリを登録した?
Oreoになってからこれに登録しないとxperiaでも動かなくなったよ >>277
TimerTaskのscheduleAtFixedRateが良いのですか!
ググるとTimerは評判悪かったので回避してました。
現在時刻を基準に長時間動かすなら、誤差が累積するHandlerよりも、
TimerTaskが良さそうですね、ありがとうございます。 >>277
お前も理解足りてない。
ひっくり返したところで「タイマー」としては、おかしな動作になるだろ。
handler.postDelayed自体は名前の通り、delayしてpostするだけですぐに終わる。 >>275
>例えば、Huaweiの一部の端末ではServiceのForeground化が行えない(正確には、API的には使えますが、すぐにKILLされます。
>また、CPU WakeUpも無効です)ため、一部の重要なServiceを常駐することができません。
>これは業務用アプリでは致命的になる恐れがあります。
https://qiita.com/eaglesakura/items/3f552dc5971d39fa9466
これかな? >>278
最適化から除外したり省電力設定から除外したりしたけど
数回に1回はまともに動かないみたい(ユーザに試してもらった)
手持ちのXperiaでも5回に1回くらいの割合でスリープしてるようで
BroadcastReceiverに通知が飛んでこない事がある
>>281
多分それだと思う
スタックオーバーフローとかQiitaも色々見たけど解決策がなかった
個人アプリだから深刻ではないけど業務アプリはどうするんだろう…? LINEとかどうやってバックグラウンド維持してるんだろう?
KeepAliveで通信を延々とやってるとか? 電話のパーミッション使ってるから優先度高く設定されてて殺されにくいとか >>280
>ひっくり返したところで「タイマー」としては、おかしな動作になるだろ。
どのようにおかしな動作になるのでしょうか? Handlerは基本スレッド間通信だからな
精度っつうもんは期待できない androiderに代わるサービスって今何が一番メジャーなの ここで聞く内容ではないかもしれないけど、詳しい人がいることを期待して来ました。
google play service が動かない端末って、どんな理由で動かないの?
ガラケータイプの端末(具体的には Yモバの 702KC など)であるアプリを動かそうとすると同サービスが必要だと言われ、
同サービスをインストールして再び試すと今度はこの端末では同サービスがサポートされてないと言われ、結局起動できない。
なんとか動かしたいと思ってるんだけど、そもそも端末の問題でどうやっても無理ってことがあるのか知りたい。
前述の 702KC の旧代である 502KC では動いてるようで、何か意図的に動作させないような細工が加えられたのならそれを無効にしてしまえばいいんじゃないかと思ってもいる。
702KC は android 5.1.1、502KC も同じはずで、同サービスが動く動かないを分けるような違いがどこにありそうか、心当たりをぜひ教えてほしい。 >>289
そういうガラスマみたいな端末はメーカーがかなりいじってるから
play serviceが対応してないのでは
デベコンの端末カタログにその型番で調べたけどなかったから
公式にサポートされてない端末ってことになる >>290,291
ありがとう
デベコンの端末カタログってのを自分で設定したことが無いから外してるかもしれないけど、google play services については google が設定してるんだよね?
ケータイメーカーの方がわざわざ動作確認する義理が無いのはいいんだけど、わざわざ除外登録を google に申し入れてるかもしれないってことかな?
アプリ起動時のエラーメッセージ的には「この端末では同サービスがサポートされてない」と出てくるけど、これは同サービス自身が端末カタログを確認してあえてエラーにしてるってこと?
あるいは同サービスはわざわざエラーにするようなことはしてないけど、この端末で機能を動かそうとしたら本当にエラーが出ちゃってる感じなのかな。
具体的にアプリがどの機能を使ってるか分からないけど、ひとつは「みまもりマップ」ってアプリで少なくともマップを使ってるだろうし、
もうひとつ試したところだと「Gyao!」で、これは何使ってるのか分からないけど支払い関係なのかな(お目当てはみまもりマップの方でGyao!は試しただけでよく知らない)。
どっちにしてもそれほどシビアなものじゃなさそうな気がするし、アプリ起動初っぱなで出てくる。 逆にplay servicesに対応できてる端末をカタログに入れてそうな
エラーがでるならやっぱりコード的に動かないと思う(オフラインで試してみたら)
どうしてもその端末で動かしたいならplay servicesを使わないアプリにするしかないかも play serviceのバージョン見るapiが確かあったから
対応してるか否かを判別するapiもあるかもね
それで確かめてみたら >>289
非対応機種は必要要件を満たしていないので、何をやっても無理 R.id.text
↑これを
"R.id.text"
↑のようにString型文字列に変換する方法はありますか? >>296
少なくとも俺は聞いたことないな
contextかresourcesのクラスになければ無いのでは >>297
ないですか...
ありがとうございます Activity継承してないクラスで
Contextが必要なメソッドを使うとき
どうやればいいですか?
継承してるクラスではthisやgetAplicationContextを与えてやればいいと思いますけど そのままcontextのオブジェクト作って渡せばできますか? contextは勝手に作らない。
Activityのthisを渡しとけ。 viewが絡むならactivityのthis
そうでないならgetApplicationContext Activityを継承するかActivityのインスタンスを作って
継承ならthisかgetApplicationContext、インスタンスならgetApplicationContext渡せばいいということですか?
viewが絡むならthisで >>296
何がしたいのか良くわからんが・・・
Reflectionを使えば、(リソース等から生成されるClassである)Gの("id"などの)フィールド
や、さらに("text"などの)id下のフィールドを列挙し、名前・型・値など取得できるから
その値がR.id.textと一致するもの("id"/"text")を探せばいいのでは?
参考: ttps://did2memo.net/2013/09/10/java-reflection-how-to-display-all-java-field/ 俺の自作アプリ数カ月に一回数千規模で
インストール端末数が増えたり減ったりするんだけど
なんなん どこかの国のplayストアでオススメかなにかに載っているのかもね 過去にインストールされてたものもジワジワ削除されてたら右肩下がりになりそうだ もしかしてandroid9でokhttp3を使うとクラッシュします?
play consoleで9だけclassnotfoundexceptionのクラッシュ報告が出てるけど原因が分からない。
androidstudioの9エミュではクラッシュしないので困ってます。 ちょっと教えてください
android開発始めて1か月ちょっとなので
質問自体が意味不明かもしれませんが
常駐部分がネットに定期的にアクセスして
ある条件に合致したらメインを起動(?)して
得られた情報を表示するって感じです
serviceを使うんだと思いますがタイプが2種類あるとか
ちなみにプログラミング言語はJavaじゃなくマイナーな言語で
表示部分やネットアクセス部分はもうできてます
(Windows版を修正してandroid対応させただけですが)
よろしくお願いします とりあえずJavaかコトリンで作って下さい
それだけです 質問が意味不明で申し訳ありませんでした
あれから検索して簡単なサンプルプログラムで
serviceを実装するところまではできました
serviceからメインの方へのデータの引き渡し方など
試行錯誤してみます あなたのアプリを買い取りますというメール来たのだが詐欺でしょうか?
ちなみにろくにダウンロードされないクソアプリです
どう見ても買い取る価値のないアプリです >>323
なら売っても害はないだろ?
200万円で売ってみりゃいいじゃん まず契約金として10万振り込んで下さい
その後そちらの口座に200万振り込みます 買い取る価値があるかどうかはお前が決めることではない
先に全額入金させて売れ >>325
じゃあ180万でいいんで振り込んでおいて下さい 9月1日までにターゲットユーザーの設定をしろってメール来てるけど、
これしないとどうなるんだろ?
小学校高学年ぐらいから使えるアプリなんで9才以上にしようとしたら
プライバシーポリシーの設定を求められたんで、まずこれを設定したが、
「アップデートを処理しています 」で一日経っても終わらない。
みんな駆け込みでやってて、Googleでの(審査?)処理がパンクしてるの
かねえ・・・ アップデート遅くなったよねえ
審査が入ったという噂もあるが アプリの審査遅いんやが
Appleより遅くなってないか canvas.drawLineでバーをスクロールさせると60fpsでもかくかくしてる気がするんですけどopenglにしたら良くなるんでしょうか? GLで動いてるソフトがヌルヌル動いて見えるなら良くなる
全部カクカクに見えるならそれが限界 audioRecordってwhileの無限ループでreadするのとsetRecordPositionUpdateListenerのhandlerでreadするのと何が違うんすか? AndroidStudio3.5にしたら特定の機種(qua tab 01)でインスト―ルができなくなりました
Installation did not succeed.
The application could not be installed.
Installation failed due to: 'device '293c69129f' not found'
デバッグを開始するとこんなメッセージがログに出て、デバッグが始まりません
調べたらInstall Flagsに-r -tというフラグを設定したり、APK from app bundle にするといいと書かれてましたが効果ありませんでした
どうすればいいでしょうか エミュ?実機かな?
私よりレベル高そうな書込みだから気が引けるけど
エミュのAPIをアップデートするときにウィルスソフトのチェックに引っ掛かったから、何をしたか忘れたけど有効にしたら上手くいった経験があります
でも不安定なんだよね
エミュで22が未だにおかしい
23は上手くいった
何が違うのか未だにわからずですがw
参考になれば エミュのAPIのアップデート?自分で書いててなんだかなw正しい表現ではないと自分で思う
過去にあまり開発経験がないから上手くいえないけど3.4から3.5にしたら何かあるごとにアップデートが裏で走ってて、たまにチェックに引っ掛かった
ネットつないでコンパイルすると何かダウンロードするのよ
エミュで実行しようとすると何かダウンロードするのよ
それを対処したら実行できた
未だにだめなのがAPI22のエミュ
何故なのかはわからないけど、経験のみの話ですすまん device xxxx not found
だからそういうことじゃねーの >>336
実機です。
ウイルスソフトは例外に登録してるので大丈夫だと思います。
>>338
デバッグボタンを押すまではデバイスとしてAndroidStudioに認識されていますが、
デバッグボタンを押して実機にAPKをインストールする段になると内部的に認識されなくなるのか上記のごとくなります。
他の機種では正常にデバッグが開始されます。 ■ このスレッドは過去ログ倉庫に格納されています