スポンサーサイト

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

【Android開発】Android4.4 KitkatでAlarm Managerの一部仕様が変わった?!

アラームがならないことがある?!だと・・・

ちょっと前に、会社で作ったアラームアプリで、アラームがならないことがあると、Android 4.4ユーザから問い合わせがきたんだけど、アラームがならないなんて報告はほぼほぼないんだよね。

しかも、鳴らないときがあるって言うから、おかしいなぁと思って、もしやAndroid4.4でなんかAPIの仕様が変わったのでは?と調べてみると、どうやらtrgetSdkVersionが19以降の場合、AlarmManagerの set() と setRepeating() で指定した時間が厳密ではなくなったっぽい。

Android4.4でAlarm Managerのset()、setRepeating()の仕様変更

どうやら、省電力仕様になったらしく、全てのアプリケーションのアラームを合理的にまとめた時間にデバイスを起こし、まとめてアラームを発火するようになった。内容からして、なんでもかんでもまとまった時間に、set() と setRepeating() でセットしたアラームが発火するわけではなく、スリープしている端末に対して、アラーム毎に起こすのではなく、ある程度発火時間が近いアラームをまとめて、一回起こしたときに発火させるという認識でいいんだと思う。


じゃあ、正確な時間に確実にアラーム鳴らすにはどうしたらええねんって思ったら、アラームを厳密な時間に発火させたいときは、新しいsetExact()メソッドが使えと・・・。


新しいメソッドをそういう仕様にすればいいのに…、と思いつつ…


ただ、先に述べたとおり、この振る舞いは、trgetSdkVersionが19以降で、Android4.4以上だけに適用される。targetSdkVersionを18以下であれば今までどおりの動作するようだ。

スポンサーサイト

【Android開発】いろいろなBroadcast②

引き続き、AndroidのBroadcastに関して、おさらーい。

前回Context.sendOrderedBroadcast()について書いた。今回はContext.sendStickyBroadcast()について書いていく。

sendStickyBroadcast()

sendStickyBroadcast()でブロードキャストすることで、スティッキーなBradcast Intentを送ることができる。スティッキーなBradcast Intentは配信が終了した後も存在し続け、配信が終了した後に登録されたBroadcastReceiverにも配信されるIntentなのだ。スティッキーとは、粘着性という意味だ(と思う)。このBradcast Intentは、removeStickyBroadcast()を呼ぶまで存続し続ける。システムが配信するStickyなBroadcastでは、たとえばACTION_BATTERY_CHANGEDで利用している。スティッキーなBradcast Intentなので、前回のバッテリーの状態が保存されているので、BroadcastReceiverを登録した瞬間にバッテリーの状態を取得できるのだ。

当初、このスティッキーBroadcastを知らない私は、なぜ、ACTION_BATTERY_CHANGEDを受けるフィルターを持つBroadcastReceiverが即座にバッテリーの状態を受信できるのか不思議だったが、スティッキーBroadcast Intentを知って納得がいった。

これに関連した話だが、ContextクラスのregisterReceiver()メソッドの定義は
public abstract Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter)
となる。この戻り値のIntentは、実はfilterに合致したスティッキーなIntentであり、該当するIntentがない場合はnullとなる。
登録したBroadcastReceiverのIntentFilterがスティッキーなIntentに合致すれば、そのIntentが、戻り値として即座にかえてくるということである。該当するスティッキーなIntentが複数ある場合は、そのうちの一つだけが戻り値として戻る。どのIntentが戻るかはアプリからは制御できない。スティッキーなIntentをその場で取得したいだけなら、第一引数のreceiverをnullにして呼び出せばよいのだ。

【Android開発】いろいろなBroadcast①

AndroidのBroadcastに関して、改めておさらい。

たいていの場合、BroadcastReceiverにBroadcast Intentを送る場合、Context.sendBroadcast()を使うが、そのほかにも、Context.sendOrderedBroadcast()Context.sendStickyBroadcast()などがある。

とりあえず、ここでは、Context.sendOrderedBroadcast()について説明する。

sendOrderedBroadcast()

sendOrderedBroadcastを使うと、このメソッドで配信したBroadcast Intentが、受信可能なBroadcastReceiverに順番に配信されるようになる。配信される順番は、Intent Filterに設定されるプライオリティで決まる。

コード上では、以下のようにIntent Filterに設定する。
myReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter("MY_ACTION");
intentFilter.setPriority(10);
registerReceiver(myReceiver, intentFilter);

AndrooidManifest.xmlファイルのBroadcastReceiverのプライオリティをセットする場合は、android:priority属性を使用する。





ここではそれぞれに10と100をプライオリティとして設定しているが、初期設定0から1000までの値を設定でき、大きい値ほど高い優先度を持つ。この設定によって、より優先度の高いBroadcastReceiverから配信されていく。優先度が同じものがある場合は、順番はランダムになるようだ。

また重要な特徴として、このメソッドでのBroadcastでは、レシーバ側で配信の中断を行うことができる。また各レシーバでの処理結果などを最終的に配信元で受け取ることができるのだ。

以下のような感じで、各レシーバ側のsetResultCode()、setResultExtras()、setResultData()でデータをセットできる。これらのメソッドを使って値を設定すると、そのレシーバの前に呼ばれているレシーバでセットした値は上書きされる(Bundleの場合は、keyが同じであれば)
 @Override
public void onReceive(Context context, Intent intent)
{
setResultCode(getResultCode());

Bundle extras = getResultExtras(true);
extras.putString("key", "value");
setResultExtras(extras);
}

Context.sendOrderedBroadcast()は2種類あり、結果を受け取れるのは、以下のメソッドである。
public abstract void sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)

最終的にセットされたデータを取得するには、第3引数のresultReceiverに指定したBroadcastReceiverのOnReceiveメソッド内で、getResultCode()、getResultExtras()、getResultData()を使うことになる。

また、abortBroadcast()を呼び出せば、以降のBroadcastReceiverに配信されなくなる。この場合でも、最終的な結果は受け取れる。

次回はContext.sendStickyBroadcast()に書こうと思う。

Eclipse上で、AndroidのJUnitテスト

今更ながら、EclipseでAndroidのプログラムをユニットテストする方法。

テストターゲットのAndroidプロジェクトを作成

まず、いつもどおり、Androidのプロジェクトを作成する。本記事では、

プロジェクト名:AndroidUnitTestTarget
パッケージ名:com.hoge.target

とした。そして以下のように、「MainActivity」というエントリーのアクティビティを作成する。

MainActivity.java

package com.hoge.target;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView result = (TextView) findViewById(R.id.resultText);

result.setText("result:" + plus(1, 2));
}


public int plus(int a, int b){
return a + b;
}

}

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/resultText"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</RelativeLayout>

テストのAndroidプロジェクトを作成

次に、テスト実行用のプロジェクトを作成する。

新規>その他>Android>Androidテスト・プロジェクトを選択
android_unit_test00.png
次へをクリック
プロジェクト名をAndroidUnitTestTargetTestとする
android_unit_test01.png

「Select Test Target」のダイアログで、テスト対象のプロジェクトとして先ほど作成した「AndroidUnitTestTarget」を選択。

作成されたプロジェクトのsrcフォルダ内に

com.hoge.target.test

というパッケージが追加されているので、その中に以下のテストケースのクラスを追加する。

TestMain.java

package com.hoge.target.test;

import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;

import com.hoge.target.MainActivity;
import com.hoge.target.R;


public class TestMain extends ActivityInstrumentationTestCase2<MainActivity> {

private MainActivity mActivity;
private TextView mResutTextView;

public TestMain() {
super(MainActivity.class);
}

@Override
protected void setUp() throws Exception {
super.setUp();

// アクティビティを取得
mActivity = getActivity();
mResutTextView = (TextView) mActivity.findViewById(R.id.resultText);
}

public void testResut() {
assertEquals(5, mActivity.plus(2, 3));
}

public void testResutText(){
assertEquals(mResutTextView.getText(), "result:3");
}

}

あとは、プロジェクトを右クリック>実行>Android JUnit Test

で、実行。

Eclipse上の「JUnit」のタブに、実行結果が出る。

実行:2/2 エラー:0 失敗:0

全テストを通過すると、緑色のバーが表示される。

android_unit_test02.png


エラーやテストに失敗した場合は、バーが赤色になる。

テーマ : android
ジャンル : コンピュータ

Google Play上の有料アプリが購入できない件ついて

2013年9月ごろから、私が公開しているGoogle Play上のAndroidアプリの有料アプリがご購入できない状態が続いております。

有料アプリをご購入しようとしていただいたユーザ様には、大変申し訳ありません。
諸事情により、私の販売アカウント側が停止している状態で、現在も復旧の目処が立っておりません。

再度、販売可能になったタイミングで、こちらのブログでも、お知らせしますので、もうしばらくお待ちください。

Androidアプリ アプリボックス アップデート Ver2.2

Androidアプリ アプリボックスをアップデートし、無料版はVer2.2.0、有料版はVer2.3.0となりました。

アプリボックスは、アプリのショートカットをエクスプローラ風にフォルダ管理し、増えすぎてしまったアプリをフォルダで管理して、すばやく起動したいアプリを探せるようにするためのアプリです。

apps box icon2_240
アプリボックス(無料版)
アプリボックス プラス(有料版)

今回の主なアップデート内容は以下のとおりです。

ショートカット作成機能
フォルダのコンテキストメニュー(フォルダアイコン長押し後、その場でリリースで表示)から、ホーム画面にそのフォルダのショートカットを作成できるようになりました。
ホーム画面に作成されたショートカットを利用することで、直接そのフォルダが選択された状態で、アプリ ボックスを起動することができます。
appsbox_blog13.png
appsbox_blog14.png
1.ホーム画面にショートカットをおきたい
フォルダを長押し(階層ビュー内のフォルダも可)
2.ドラッグモードに移行
 
appsbox_blog15.pngappsbox_blog16.png
3.その場で指を離して、表示されるメニューの
「ショートカット作成」を選択
4.ホーム画面にショートカットが作成される
 

注)ショートカットの作成は、インストールされているすべてのホームアプリに対して、同時に行われます(AndroidOSの仕様)。

並び替え機能
画面右上に並び替えボタンが追加されました。
appsbox_blog17.png

このボタンをタッチし、表示される以下の並び順を選択することで、現在選択されているフォルダに登録されているアイテムのフォルダ内ビューでの並びを選択した並び順で並び替えることができます。
[選択できる並び順]
・名前(昇順)
・名前(降順)
・追加順(昇順)
・追加順(降順)

<以下、有料版のみ>
・種類(昇順)
・種類(降順)
・手動

設定は各フォルダ毎に可能です。
さらに、手動を選択した場合は、フォルダ内ビューでアイテムを並び替えたい位置にドラッグ&ドロップすることで自由に並び替えることができます。
[手動]での並び順は記憶されるため、他の並び順に変えても[手動]での並びはリセットされません。

注)並べ替えは、フォルダ内ビューでのアプリ(有料版では、ブックマーク、連絡先も)のショートカットに対してのみ行われます。フォルダに対しては適用されません。

アプリボックス(無料版)はこちらから">アプリボックス(無料版)はこちらから

アプリボックス プラス(有料版)はこちらから">アプリボックス プラス(有料版)はこちらから

テーマ : androidアプリ
ジャンル : 携帯電話・PHS

Androidアプリ アプリボックス アップデート Ver2.06

Androidアプリ アプリボックスをアップデートし、無料版はVer2.0.6、有料版はVer2.1.5となりました。

アプリボックスは、アプリのショートカットをエクスプローラ風にフォルダ管理し、増えすぎてしまったアプリをフォルダで管理して、すばやく起動したいアプリを探せるようにするためのアプリです。

apps box icon2_240

今回のアップデート内容は、無料版・有料版どちらも同じで、
アプリボックス(無料版)
アプリボックス プラス(有料版)
v2.0.5(有料版v2.1.4)
 -アイコンドラッグ時に表示される半透明アイコンの表示バグ修正・画質向上
 -フォルダ内ビューにおいて、表示されるアイコンのサイズを設定から小・中・大から選択できるようにした
 -フォルダ内ビューにおいて、表示されるアイコンのサイズのデフォルトを中にした(もともとは小の大きさだった)

v2.0.6(有料版v2.1.5)
 -アプリケーション選択ダイアログ表示処理最適化
 -英語表記の修正

となっております。

「-アイコンドラッグ時に表示される半透明アイコンの表示バグ修正・画質向上」
に関しては、フォルダおよびアイテムを長押しして、ドラッグ可能状態にしたときに表示される、半透明のアイコンが特定の状況において正しく表示しきれていない部分があったのを修正したのと、これまで、ドラッグする対象のアイコンをスケーリングして半透明していたので、若干ぼやけた画像になっていたのを改良しました。
appsbox_blog05.png

appsbox_blog06.png


「-フォルダ内ビューにおいて、表示されるアイコンのサイズを設定から小・中・大から選択できるようにした
-フォルダ内ビューにおいて、表示されるアイコンのサイズのデフォルトを中にした(もともとは小の大きさだった)」
に関しては、特に外国の方がアイコンサイズがタイニー、タイニー言うので、アイコンサイズをビッグサイズ!!にしてやろうということで、フォルダビュー(可動バーをはさんで下のウィンドウ)内に表示されるアイコンの大きさを小・中・大の3段階で変更できるようにしました(メニュー→設定から変更できます)。

appsbox_blog07.png
小さいやーつ

appsbox_blog08.png
中ぐらいのやーつ

appsbox_blog09.png
大きいやーつ

デフォルトのサイズは「中」となっております。
もともとのサイズは「小」のサイズでしたので、アップデートされた方は若干アイコンサイズが大きくなっていますので、もし、もともとのサイズがよかったという方は、お手数ですが、メニュー→設定からアイコンサイズを「小」へ変更をお願いします。

また、フォルダ階層ビュー(可動バーをはさんで上のウィンドウ)でのサイズも若干ですが大きくなっており、前よりはタッチしやすくなっているとか思います。たぶん…(-o-;)


アプリボックス(無料版)はこちらから">アプリボックス(無料版)はこちらから

アプリボックス プラス(有料版)はこちらから">アプリボックス プラス(有料版)はこちらから

テーマ : androidアプリ
ジャンル : 携帯電話・PHS

Androidアプリ アプリ ボックス アップデート!Ver2.0.1(無料)2.1(有料)

毎度同じ始まり方で芸がないですが、おかげさまで、3万5,000件以上のダウンロード(無料版)をいただいております、Androidアプリ アプリボックスをアップデートし、無料版はVer2.0.1、有料版はVer2.1となりました。

アプリボックスは、アプリのショートカットをエクスプローラ風にフォルダ管理し、増えすぎてしまったアプリをフォルダで管理して、すばやく起動したいアプリを探せるようにするためのアプリです。

apps box icon2_240

今回のアップデート内容は、
アプリボックス(無料版)
v2.0.1
 -アイテム選択ダイアログで、対象のフォルダに登録済みのアイテムを選択不可にした
 -UI変更

無料版のUI変更では、広告位置が下になったので、より使いやすくなったと思います。

アプリボックス プラス(有料版)
v2.0.1
 -アイテム選択ダイアログで、対象のフォルダに登録済みのアイテムを選択不可にした
 -シークレットモードを追加(任意のフォルダを隠しフォルダにする機能)
v2.1
 -通知領域から起動できるようにした

「アイテム選択ダイアログで、対象のフォルダに登録済みのアイテムを選択不可にした」
に関しては、
appsbox_blog00.png
↑のように、アイテム選択画面で、選択しているフォルダにすでに登録されているアイテムに関しては、あらかじめ、チェックマーク(チェックボックスではなく)を表示して、さらにタッチしても反応しないようになりました。
Androidマーケットでコメントしていただいた方、ご要望ありがとうございます。さっそく対応させて頂きました。

「シークレットモード」は、任意のフォルダを隠す(シークレットにする)機能です。

シークレットにしたいフォルダに対し長押しからその場でリリースで表示されるコンテキストメニューで「シークレット」を選択すると、そのフォルダがシークレットに設定され、シークレットモードにしない限り、表示されなくなります。
appsbox_blog01.png

シークレットモードのオンオフは、メニュー→設定から行えます。
appsbox_blog02.png

シークレットモードをオン(シークレット設定されたフォルダを表示)にする場合は、以下のようにロック番号入力を求められます。ロック番号の初期値は「8888」となっており、同じく設定から自由に変更することができます。
appsbox_blog03.png

シークレットモードオンのときに、シークレット設定されたフォルダは、南京錠のアイコンがついた状態で表示されます。
appsbox_blog04.png

シークレット機能は、人に見られたくないようなカテゴリわけしている場合は、使えるかもしれませんね(^^;)



アプリボックス(無料版)はこちらから">アプリボックス(無料版)はこちらから

アプリボックス プラス(有料版)はこちらから">アプリボックス プラス(有料版)はこちらから

テーマ : androidアプリ
ジャンル : 携帯電話・PHS

Androidアプリ アプリ ボックス アップデート!Ver2.0

おかげさまで、2万5,000件以上のダウンロード(無料版)をいただいております、Androidアプリ アプリボックスをアップデートし、Ver2.0となりました。

アプリボックスは、アプリのショートカットをエクスプローラ風にフォルダ管理し、増えすぎてしまったアプリをフォルダで管理して、すばやく起動したいアプリを探せるようにするためのアプリです。

apps box icon2_240
アイコンも若干変更になりましたー。

今回のアップデート内容は、
アプリボックス(無料版)
 -動作の最適化
 -UI変更

アプリボックス プラス(有料版)
 -☆ブックマークと連絡先のショートカットを登録できるようにした
 -動作の最適化
 -UI変更

UIの変更に関しては、
apps+box+help19_convert_20120211001539.pngapps_box_help03.png
このようにファンクションボタン部分のデザインが変更になりました。


apps_box_help08.png
アイテム追加ボタン
apps_box_help04.png
フォルダ追加ボタン
apps_box_help18.png
履歴ボタン
delete.png
アイテムをドラッグしたときに画面最下部に現れるゴミ箱アイコン

かわいくなりましたでしょ?


それはさておき、大きな変更点といえば、有料版アプリ ボックス プラスが、これまでアプリのショートカットしかフォルダに登録できなかったところを、ブックマークと連絡先のショートカットも登録できるようになりました。合わせて、ショートカットを追加するダイアログのUIも以下のように変更になっております。
apps_box_help09.png
アプリ
apps_box_help09_1.png
ブックマーク
apps_box_help09_2.png
連絡先


タブにより、アプリ、ブックマーク、連絡先を切り替えて選択するようになりました。すでにブラウザ等で登録してあるブックマークと連絡先として端末に登録してある連絡先を選択することが出来ます。

アプリボックスに登録したブックマークのショートカットをタッチすれば、ブラウザを開き、そのブックマークのURLにアクセスします。連絡先のショートカットをタッチした場合は、その連絡先を開くようになっています。

アプリボックス(無料版)はこちらから

アプリボックス プラス(有料版)はこちらから



テーマ : androidアプリ
ジャンル : 携帯電話・PHS

Androidアプリ アプリ ボックス アップデート!

おかげさまで、1万5,000件以上のダウンロードをいただいております、Androidアプリ アプリ ボックスをアップデートいたしました。

apps box icon_240

主なアップデート内容は、フォルダ作成ウィザード機能の追加です。

この機能は、オーソドックスなカテゴリを2段階の階層にしたフォルダ構成が用意されており、そこから、使っている端末にインストールされているアプリにあったカテゴリを選択して、一度にフォルダ階層を作成するという機能です。

apps_box_help20.png

その他は、

・フォルダ作成ダイアログから一般的なカテゴリ名をプリセットのプルダウンメニューから選択できるようになった
・本アプリから登録アプリ起動したときに、本アプリを終了できる設定を追加
・処理の最適化
・バグフィックス

となっております。アップデート内容は、MY WifeであるbasaraWifeのサイトからも見れますので、そちらもよろしくお願いします。

テーマ : Android
ジャンル : 携帯電話・PHS

プロフィール

basarafire

Author:basarafire
IT関連会社で情報処理の基礎やプログラミング(主にC・Java)を教えています。最近はAndroidの教育や開発なども行ったりしています。

basarafireの開発したアプリに関する内容はこちらから
http://basarafire.jugem.jp/

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
お気に入り
[プレスブログ]価値あるブログに換金可能なポイントを差し上げます。 アクセストレードレビュー
提携
ゲーム
QRコード
QR
リンク
RSSリンクの表示
お気に入り商品
カウンター
おすすめAndroid書籍
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。