2012年9月16日日曜日

GPS発信器メール

無料アプリ、GPS発信機メールをリリースしました。
位置情報を定期的にメール送信するプログラムです。
近頃、誘拐犯罪のニュースが目につくので作成してみました。

日本では毎年10万人ほどが行方不明になっています。
その半数が数年で発見されますが、他の半数は自殺や事件に巻き込まれたものと考えられています。
義務教育期間以下の子供が行方不明になると、直ちに警察の捜索が開始継続されますが、高校生以上の年齢の場合は事件性が高くなければ捜索される事はありません。

子供の安全に確認に役立ててください。

※2012/11/30現在の仕様について

位置情報の正確性を重視するため、基地局の位置情報を使用しません。
基地局の位置情報を使用すると数百メートル単位のずれが生じ、
不正確な情報によって混乱を招く恐れがあるためです。
そのためGPSの電波が入らないと機能しません。

GPSの電波が入らない場合は待機状態になります。
GPSの電波が入りしだい再実行します。

当アプリが実行中の場合は、端末のGPS機能のオンオフと連動して動作します。
当アプリが停止中の場合は、端末のGPS機能のオンオフに関わらず動作を停止します。
GPSのスイッチと連動させる事で。当アプリの実行停止手順を簡略化しています。

当アプリは常駐サービスではありません。アンドロイドのタスクスケジューラーを使用しています。
必要なタイミングでのみ動作する事で、CPUやメモリの消費を抑えています。
他のアプリとの衝突によるプロセスの停止や電力消費を抑えるためです。

※2012/11/30現在の不具合

携帯の電波が受信できなく、GPSの電波が受信できる場合に、メールの送信に失敗し、再送信を行いません。
携帯の基地局が少ない地域でのみ発生すると思われます。

※今後の実装予定

メール送信失敗時の再送信
動作する時間帯の指定
バッテリー状態をメール本文に追加
基地局の位置情報を使用、この場合は不正確な情報であるとメール本文に明記

次回リリース日は未定です。



2012年9月8日土曜日

プリファレンス 簡易保存サンプル


文字列をプリファレンス 保存

プリファレンス機能を使う事で簡易情報記録ができます。
ちょっとした管理情報を記録するには便利ですが。
この情報はアプリを更新すると消えてしまうので注意が必要です。



数値をキーにして文字列の保存と読み取り

・読み取り
private String getPreStr(int inInt){
  String str="";
  try{
  SharedPreferences pref =
  getSharedPreferences("識別",MODE_PRIVATE);
  str = pref.getString(String.valueOf(inInt), "");//引数INTの番号をKEYにして読み取り なければ空文字

  }catch (Exception e){
   e.printStackTrace();
    Log.e("getPreStr","Null");
  }
   
return str;
 
 }
・書き込み
 private void setPreStr(int inInt ,String inStr){
  try{
  SharedPreferences pref =
  getSharedPreferences("識別",MODE_PRIVATE);
  Editor e = pref.edit();
  e.putString(String.valueOf(inInt), inStr);//引数INTの番号をKEYにして書き込み
  e.commit();
  }catch (Exception e) {
// TODO: handle exception
  e.printStackTrace();
  Log.e("setPreStr","null");
}
 
 }

ブロードキャストIntent 端末の動作を感知



端末の動作を感知してサービスを実行する

マニュフェストファイルに特定の動作を感知する情報を定義します

以下、例 action.BOOT_COMPLETED 端末の起動時に
testReceiver このクラスを関連付けて TestService を実行する。


ブロードキャストIntent(端末の動作)を受け取ってサービスを開始
・アプリケーションタグ (action.BOOT_COMPLETED端末が起動した場合)

<receiver android:name=".testReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>
public class TestReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
            Intent serviceIntent = new Intent(context, TestService.class);
            context.startService(serviceIntent);
    }
}



・以下、端末のイベントの種類
ACTION_AIRPLANE_MODE_CHANGED ユーザーが内外に機内モードの携帯電話を切り替えています。
ACTION_ALL_APPS リストすべての使用可能なアプリケーションを入力。
ACTION_ANSWER 電話の着信を処理する。
ACTION_APP_ERROR ユーザーがクラッシュ/ ANRダイアログの "レポート"ボタンを押した。
ACTION_ASSIST アクションの実行を支援する。
ACTION_ATTACH_DATA データの一部がいくつかの他の場所に添付する必要があることを示すために使用します。
ACTION_BATTERY_CHANGED これはスティッキー放送充電状態、レベル、およびバッテリーに関するその他の情報が含まれている。
ACTION_BATTERY_LOW デバイス上のローバッテリ状態を示します。
ACTION_BATTERY_OKAY バッテリーがすぐに低くされた後も大丈夫であることを示します。
ACTION_BOOT_COMPLETED システムの起動が完了した後にこれは、かつて放送されています。
ACTION_BUG_REPORT バグを報告するための活発な動きを見せる。
ACTION_CALL データで指定された誰かへの呼び出しを実行します。
ACTION_CALL_BUTTON ユーザーが電話をかけるためにダイヤラまたは他の適切なUIに行くために "呼び出し"ボタンを押した。
ACTION_CAMERA_BUTTON "カメラボタン"が押されました。
ACTION_CHOOSER ユーザーが先に進む前に、彼らが望むものを選択できるように、活動の選択を表示します。
ACTION_CLOSE_SYSTEM_DIALOGS ユーザーアクションは却下する一時的なシステムダイアログを要求するべきであるときにブロードキャストされます。
ACTION_CONFIGURATION_CHANGED 現在のデバイス構成 (オリエンテーション、ロケールなど)が変更されました。
ACTION_CREATE_SHORTCUT ショートカットを作成します。
ACTION_DATE_CHANGED 日付が変更されました。
ACTION_DEFAULT の同義語ACTION_VIEW、データの一部で行われている"標準的な"アクション。
ACTION_DELETE そのコンテナから与えられたデータを削除します。
ACTION_DEVICE_STORAG E_LOW デバイス上のメモリ不足状態を示すスティッキー放送。これは、システムによってのみ送信することができ、保護目的である。
ACTION_DEVICE_STORAG E_OK デバイス上のメモリ不足状態がもはや存在しないことを示し。これは、システムによってのみ送信することができ、保護目的である。
ACTION_DIAL データで指定された番号をダイヤルします。
ACTION_DOCK_EVENT デバイスの物理的なドッキング状態の変化のためにスティッキ放送。
ACTION_EDIT 指定されたデータへの明示的な編集可能なアクセスを提供します。
ACTION_EXTERNAL_APPLICATIONS_AVAILABLE 彼らは存在しているメディアが使用可能であるためパッケージ(以前は利用できなかった)のセットのためのリソースは、現在入手可能である。
ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE 彼らは存在しているメディアが使用できないので、パッケージのセットのためのリソースは現在使用できません。
ACTION_FACTORY_TEST 工場出荷時のテスト用のメインエントリポイントです。
ACTION_GET_CONTENT ユーザーが、特定の種 類のデータを選択し、それを返すことができます。
ACTION_GTALK_SERVICE_CONNECTED GTalkの接続が確立されました。
ACTION_GTALK_SERVICE_DISCONNECTED GTalkの接続が切断されました。
ACTION_HEADSET_PLUG 有線ヘッドセットに接続したり抜いた。
ACTION_INPUT_METHOD_CHANGED 入力方法が変更されました。
ACTION_INSERT 指定された容器の中に空の項目を挿入します。
ACTION_INSERT_OR_EDIT 既存のアイテムを選択するか、新しいアイテムを挿入し、それを編集してください。
ACTION_INSTALL_PACKAGE 起動アプリケーションのインストーラ。
ACTION_LOCALE_CHANGED 現在のデバイスのロケールが変更されました。
ACTION_MAIN メインエントリポイントとして起動し、データを受け取ることを期待していません。
ACTION_MANAGE_NETWORK_USAGE 特定のアプリケーションのネットワーク・データの使用状況を管理するための設定の表示。
ACTION_MANAGE_PACKAGE_STORAG E メモリー不足の状態の通知は、ユーザーの確認とパッケージ管理が開始されるべきであることを示します。
ACTION_MEDIA_BAD_REMOVAL 外部メディアは、SDカードスロットから取り外されましたが、マウントポイントがアンマウントされていなかった。
ACTION_MEDIA_BUTTON "メディアボタン"が押されました。
ACTION_MEDIA_CHECKING 外部メディアが存在しており、点検メディア用のマウントポイントへのパスをディスクがチェックされているIntent.mDataフィールドに含まれています。
ACTION_MEDIA_EJECT ユーザは外部記憶メディアを削除する意向を表明しました。
ACTION_MEDIA_MOUNTED 外部メディアが存在し、そのマウントポイントにマウントされます。
ACTION_MEDIA_NOFS 外部メディアが存在していますが、互換性のないFSを使用している(または空白)をチェックメディアのマウントポイントへのパスはIntent.mDataフィールドに含まれています。
ACTION_MEDIA_REMOVED 外部メディアは削除されました。
ACTION_MEDIA_SCANNER_FINISHED メディアスキャナがディレクトリをスキャンし終えた。
ACTION_MEDIA_SCANNER_SCAN_FILE ファイルをスキャンし、メディアデータベースに追加するには、メディアスキャナーを要求します。
ACTION_MEDIA_SCANNER_STARTED メディアスキャナがディレクトリをスキャンし始めている。
ACTION_MEDIA_SHARED それはUSBマスストレージを介して共有されているので、外部メディアのマウントが解除されます。
ACTION_MEDIA_UNMOUNTABLE 外部メディアが存在するが、マウントできません。
ACTION_MEDIA_UNMOUNTED 外部メディアが存在していますが、そのマウントポイントにマウントされていない。
ACTION_MY_PACKAGE_REPLACED アプリケーションの新しいバージョンは、既存のいずれかの上にインストールされています。
ACTION_NEW_OUTGOING_CALL 発信コールが置かれようとしています。
ACTION_PACKAGE_ADDED 新しいアプリケーションパッケージは、デバイスにインストールされました。
ACTION_PACKAGE_CHANGED 既存のアプリケーション・パッケージが変更されている(例えば、
ACTION_PACKAGE_DATA_CLEARED ユーザーがパッケージのデータをクリアしています。
ACTION_PACKAGE_FIRST_LAUNCH そのアプリケーションが最初に起動されたアプリケーションのインストーラパッケージに送信され(それが初めてですが、停止状態から移動されています)。
ACTION_PACKAGE_FULLY_REMOVED 既存のアプリケーションパッケージは完全にデバイスから削除されました。
ACTION_PACKAGE_INSTALL この定数は、廃止されています。この定数は使われてこなかった。
ACTION_PACKAGE_NEEDS_VERIFICATION パッケージは検証する必要があるときにシステムパッケージ検証者に送信されます。
ACTION_PACKAGE_REMOVED 既存のアプリケーションパッケージがデバイスから削除されました。
ACTION_PACKAGE_REPLACED アプリケーションパッケージの新しいバージョンがすでにインストールされていた既存のバージョンを置き換えて、インストールされています。
ACTION_PACKAGE_RESTARTED ユーザーは、パッケージを再起動しており、そのすべてのプロセスが強制終了された。
ACTION_PASTE クリップボードの現在の内容から、それを初期化し、指定したコンテナに新しい項目を作成します。
ACTION_PICK 選択したものを返す、データから項目を選んでください。
ACTION_PICK_ACTIVITY クラスが選択され帰国、意図特定のアクティビティを選択します。
ACTION_POWER_CONNECTED 外部電源がデバイスに接続されています。
ACTION_POWER_DISCONNECTED 外部電源はデバイスから削除されました。
ACTION_POWER_USAGE_SUMMARY ユーザーに表示する電力使用状況情報を表示します。
ACTION_PROVIDER_CHANGED 一部のコンテンツプロバイダが、彼らは、ユーザーが特に興味のあることが、新しいイベントやアイテムを公開する自分の名前空間の部分を持って
ACTION_REBOOT デバイスの再起動を持ちなさい。
ACTION_RUN どんなことを意味し、データを実行します。
ACTION_SCREEN_OFF 画面がオフになった後に送信されます。
ACTION_SCREEN_ON 画面がオンになった後に送信されます。
ACTION_SEARCH 検索を実行します。
ACTION_SEARCH_LONG_PRESS 長い検索キーを押すと関連付けスタートアクション。
ACTION_SEND 他の誰かにいくつかのデータを配信します。
ACTION_SENDTO データで指定された誰かにメッセージを送信します。
ACTION_SEND_MULTIPLE 他の誰かに、複数のデータを配信します。
ACTION_SET_WALLPAPER なし。
ACTION_SHUTDOWN デバイスをシャットダウンしています。
ACTION_SYNC データの同期を実行します。
ACTION_SYSTEM_TUTORIAL getStringExtraは(SearchManager.QUERY) を検索するためのテキストです。
ACTION_TIMEZONE_CHANGED タイムゾーンが変更されました。
ACTION_TIME_CHANGED 時刻が設定されていました。
ACTION_TIME_TICK 現在の時刻が変更されました。
ACTION_UID_REMOVED ユーザーIDがシステムから削除されました。
ACTION_UMS_CONNECTED この定数は、廃止されています。android.os.storage.StorageEventListenerに置き換え
ACTION_UMS_DISCONNECTED この定数は、廃止されています。android.os.storage.StorageEventListenerに置き換え
ACTION_UNINSTALL_PACKAGE 起動アプリケーションのアンインストーラ。
ACTION_USER_PRESENT デバイスがウェイクアップした後にユーザーが存在しているとき(keyguardがなくなっている場合など)に送信されます。
ACTION_VIEW ユーザーにデータを表示します。
ACTION_VOICE_COMMAND スタート音声コマンド。
ACTION_WALLPAPER_CHANGED この定数は、廃止されています。最近のアプリケーションでは使用すべき WindowManager.LayoutParams.FLAG_SHOW_WALLPAPERをむしろこの放送のために見て、自分で壁紙をレンダリングするのではなく、そのUIの背後に示すように壁紙を持っている。
ACTION_WEB_SEARCH ウェブ検索を実行します。