ラベル Activity の投稿を表示しています。 すべての投稿を表示
ラベル Activity の投稿を表示しています。 すべての投稿を表示

2015年11月4日水曜日

[Android] Recent Apps(アプリ履歴)にActivityを表示させない方法

非常にニッチなニーズなのですが、諸般の事情で実装する必要があったので備忘で書いておきます。

Recent Apps(アプリ履歴、タスク一覧ともいうのかな?)に対象のActivityを非表示にするには、対象Activityがフォアグラウンドになければ


にある通り、AndroidManifest.xmlにて対象Activityの<activity>に

android:excludeFromRecents="true"

を指定してあげれば非表示になります。

問題は、対象Activityがフォアグラウンドにある場合で、その場合は、下記のようにexcludeFromRecents以外に色々と設定してあげる必要があります。
(TargetActivityはご自身のActivity名に読み変えてください)。


正直、各設定の詳細な意味は深く理解していません(汗
おまじないに近いです。

次の記事を参考にしました。

Issue 53313 - android - Foreground service killed when receiving broadcast after acitivty swiped away in task list - Android Open Source Project - Issue Tracker - Google Project Hosting

2015/11/7追記:

もっと簡単で確実な方法がありました。onPause()でsetTheme(android.R.style.Theme_NoDisplay)すれば良いです。

protected void onPause() {
    setTheme(android.R.style.Theme_NoDisplay);
    super.onPause();
}



2015年7月7日火曜日

[Android] アクティビティの多重起動を防ぐ

Serviceを使ってマルチスレッドからActivityを呼び出す(startActivity())ことをやっていると、Activityが多重起動してしまいErrorが生じてしまうケースがあります。(スレッドセーフに作られているActivityならいいのですけどね)。

このケースの解決方法として、アクティビティの多重起動を防ぐという方法があります。やり方は簡単で、AndroidManifestで多重起動を防ぎたいアクティビティのactivityタグでandroid:launchMode="singleInstance"を指定するだけです。
記述例は次の通り。

参考:
 プログラムの多重起動と連続起動について - fの備忘録

2015年3月28日土曜日

[Android] LayoutInflaterを使って他のアクティビティのViewにアクセスする

LayoutInflaterを使うことで他のアクティビティのViewにアクセスできます(もちろん自分自身のActivity内で複数のレイアウト(XML)を使うこともできます)。

MainActivityとSubActivityの二つのアクティビティがあるとします。ここでMainActivityが使用するレイアウト(XML)をR.layout.main.xml、SubActivityで使用するレイアウト(XML)をR.layout.sub.xmlとします。それぞれのXMLを示します。
main.xml
sub.xml
ここで、SubActivityからR.layout.main.xmlのTextView(R.id.main)にアクセスするにはLayoutInflaterを使って次のようにします。
この方法を活用すると、この例のように他のアクティビティのViewにアクセスするだけでなく、ボタン押下のタイミングで異なるレイアウトを切り替えたり、ヘッダ、フッタのような共通レイアウトの使用を行うことができます。

2015年2月17日火曜日

[Android] ServiceからActivityを起動する

ServiceやReceiverからActivityを普通にIntentで起動しようとしてもエラーになります。起動するにはIntentにFLAG_ACTIVITY_NEW_TASKフラグを設定します。

例えば、Serviceで定期的に状態を監視し、ある条件を満たした場合にActivityを表示する、などに使えます。Intentを使ったパラメータの授受も通常通り行えます。

2015年2月12日木曜日

[Android] 遷移先Activityから遷移元Activityに戻る方法

[Android] 他の画面(Activity)にパラメータを渡して遷移する にてIntentを使って画面(Activity)を遷移する方法を示しました。この場合に、遷移先Activityから遷移元Activityに戻るにはfinishメソッドを使います。

Intentを使って再遷移する方法とは異なり、遷移元Activityのクラス名を遷移先Activityが知る必要がないので、finishを使う方がDRY(Don't Repeat Yourself)でおすすめです。

2015年2月10日火曜日

[Android] 他の画面(Activity)にパラメータを渡して遷移する

android.content.Intentを使います。

まず、画面遷移(他のActivity)に遷移するなら次の通りです。

この際に、パラメータ(任意のオブジェクトも可)を渡すならintent.putExtraを使います。
putExtraの第一引数はパラメータのキーで、第二 引数が渡したいパラメータそのものです。
遷移先Activityでのパラメータの受け取りも含めて例を示します。




2015年1月22日木曜日

[Android] [Android Studio] 新規アクティビティ(Activity)を追加する方法

Android Studioにて新しいアクティビティ(画面)をアプリケーションに追加する方法です。 

1. app->java->追加したいパッケージを選択して右クリック(MacはCtrl+右クリック)します。

2. 表示されるメニューから[新規]->[Activity]->好きなタイプのアクティビティを選択します。
 
3. アクティビティ作成のウィザードが開くので必要なら変更して、[終了]を押下します。

4. 作成したアクティビティの定義は自動的にAndroidManifest.xmlに追記されます。(下図の反転部分)



[Android] 任意のアクティビティ(Activity)を初期表示に指定する方法

プロジェクトのAndroidManifest.xmlにて、初期表示に指定したいアクティビティ(画面)の<activity>タグ内に下記のように<intent-filter>を記述します。