プロフィール

猫好きトム

Author:猫好きトム
モルディブと猫が大好きです!モルディブは10回行きました。
英語ができないのに外資系金融に無謀にも転職して、ITとして10年ほど働き、今は会社を辞めて猫と一緒に一休み中です。趣味は旅行とFXと猫を見ることです!英語の勉強は必要に迫られてずっとやってます。TOEIC935点です。

最新記事

カテゴリ

月別アーカイブ

最新トラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード

QR

FC2カウンター

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Androidアプリ開発メモ - Activity を Background で動かす、端末スリープ時の sleep, wait の動作等々

Android 開発してると、ちょっとしたことで色々躓きます。そんで、本を見てもなかなか書いてなくて、ググって探し回ることになります。
そんなこんなでここ数日に出くわして調べたことに関して、自分のメモ代わりにまとめておきます。

ローカルファイルの WebView での表示に関して
ローカルファイルがその他のファイル、イメージを持っている場合は、assetsフォルダに置いた場合は相対パスで参照可能だが、別のところ、例えば raw などの下に置いた場合は、絶対パスでないとだめ。

端末スリープ時の sleep, wait に関して
端末がスリープモードに入ってしまうと、sleepやwait は別スレッドを作ってやっても正常に動かない(動いたり、動かなかったり。たまに遅れて動いたり)
なので、この場合は必ず AlarmManager と BroadcastReceiver を使用

ソースコードでアプリケーションが使用しているアイコンのリソースIDを取得
getApplicationInfo().icon で取得可能

ソースコードで Manifest で定義されている label を取得
getApplicationInfo().loadLabel(getPackageManager() で取得可能
getApplicationInfo().labelRes はなぜか0 で動かなかった

Activity から BroadcastReceiver に値を渡す
Intent の putExtra で値を入れて、Receiverに渡すのだが、このときに注意が必要。
PendingIntentの作成のときに、FLAG_CANCEL_CURRENT を指定しておかないと、Receiver側での値が null になる。
こんな感じ。
PendingIntent pintent = PendingIntent.getBroadcast(activity, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Activity を Background で動作させるには
moveTaskToBack(true) を呼ぶだけ


BackgroundのActivityを前面に持ってくるには
そのActivityを、startActivity で起動するだけ。ただし、Manifest で、そのActivity に対し、android:launchMode="singleTask" を指定しておくこと。
こんな感じ
android:name=".MultiTimer"
android:label="@string/app_name"
android:launchMode="singleTask">

さもないと、新しいActivityインスタンスが起動されてダブってしまう。
singtleTop だと、そのActivityがTaskのトップにある場合はそれが表示されるが、他のActivityがそのActivityよりもそのTask中の上にある場合は、新たなインスタンスが作られてしまう。

ちなみに、Activityから同じActivityを起動すると、なぜか Back Key で前のActivityにも、ホーム画面にも戻らなくなってしまう。なので、BackgroundからForegroundにActivityを持って来たい場合は、BroadcastReceiver とAlarmManagerでやる。同一Activityからの呼び出しは避けたほうがよさそう。

BroadcastReceiverからActivityをForeground に持ってくる場合、たとえそのActivityの新規インスタンスを作成したくなくても、起動時の Intent でsetFlags( Intent.FLAG_ACTIVITY_NEW_TASK) を指定すること。じゃないと動かない。Manifestで android:launchMode="singleTop" を設定していれば、FLAG_ACTIVITY_NEW_TASKをここで指定しても、新しいインスタンスは起動されないから大丈夫。


スポンサーサイト

<< Androidアプリ開発メモ - EditText のキーイベントを拾う等 | ホーム | Androidアプリ開発メモ - カスタムダイアログからのソフトキーボードの表示 >>


コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)


まとめtyaiました【Androidアプリ開発メモ - Activity を Background で動かす、端末スリープ時の sleep, wait の動作等々】

Android 開発してると、ちょっとしたことで色々躓きます。そんで、本を見てもなかなか書いてなくて、ググって探し回ることになります。そんなこんなでここ数日に出くわして調べたこと


 ホーム 


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。