Android ショートカットを作成、既にある場合は作らない方法

Android

Android ショートカットを作成、既にある場合は作らない方法

ホーム画面にショートカットアイコンを作成するのは、本来ならばユーザーがアプリ一覧から長押しとかでユーザーが行うことですが、最近のアプリでは、アプリ自身がやってくれるのが流行のようです。
ホーム画面にあれば、忘れられる可能性も低くなりますもんね!

下記のURLにあったものを参考にしておりますが、一点、既にショートカットアイコンがある場合に何度も作成してしまうのを避ける処理を入れました。

http://monoist.atmarkit.co.jp/mn/articles/1203/16/news006.html

 private void makeAppShortCut(Context context){
   // アプリケーションを起動するためのIntentを作成
    Intent targetIntent = new Intent(this, MenuActivity.class);
    targetIntent.setClassName( context, "takuru.driver.MenuActivity" );
    makeShortCut(context, targetIntent, getString(R.string.app_name), R.drawable.ic_launcher );
    }
 	    
 private void makeShortCut(Context context, Intent targetIntent, String title, int iconResource){
  // ショートカット作成依頼のためのIntent
   Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
  	 
  // ショートカットのタップ時に起動するIntentを指定
   intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, targetIntent);
 
  //これをつけておかないと、すでにホームアイコンがあっても、また作成してしまう
   intent.putExtra("duplicate", false);
 	 
    Parcelable icon = Intent.ShortcutIconResource.fromContext(context, iconResource);
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
  
  // BroadCastを使って、システムにショートカット作成を依頼する
       context.sendBroadcast(intent);
  }   

ダイアログで、「ショートカットを作成しました」「すでにショートカットがあります」というようなものが出ますので、これが嫌な場合は、インストールした直後のような処理にこれを入れたほうがいいでしょう。

Android キーストア・ファイルは存在しません

Android

Androideで現在位置などを取得・表示するために、Google Mapsを利用するためにはAndroid Maps API Key をGoogle社から取得する必要があります。

Sign Up for the Android Maps API

そのためには、開発環境であれば開発環境の証明書のフィンガープリントが必要です。

そのためには、たとえば私はWindwsXPで開発していますがEclipseのPreference→Android→BuildのDefault debug keystoreに記載してあるパスがDefault debug keystoreのはずなので、下記のようにコマンドプロンプトから入力して、フィンガープリントを取得しようとしてみました。

C:\Program Files\Java\jre7\bin>keytool -list -keystore “C:\Documents and Setting
s\Username\.android\debug.keystore”

すると、

keytoolエラー: java.lang.Exception: キーストア・ファイルは存在しません
って出ちゃうんです。

普通にExplorerでたどってみても、確かにない!
えー と検索で調べてみても、わかりません。

キーストアファイルをリストするようにコマンドを変更してみても

keytoolエラー: java.lang.Exception: キーストア・ファイルは存在しますが、空です:

となってしまいます。

と、気を取り直してプロジェクトをAVDで起動してみたところ、なんとdebug.keystoreができました![smile]
無事にフィンガープリントも取得できました。

むー、一度もAVDを動作させてない開発環境だったので、debug.keystoreファイルができてなかったんですね。

1時間ぐらい無駄にしちゃいました。[sad]

Android エラー error invalid symbol ‘continue’

Android

Android エラー error invalid symbol ‘continue’

Androidのレイアウトファイルに、下記のように書き、

 <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:src="@drawable/continue" />

drawableにcontinue.pngを入れていたところ
Consoleに

 error: invalid symbol: 'continue'

と出て、ビルドできなくなってしまいました。

答えがこちらのサイトにあり
http://stackoverflow.com/questions/7850069/error-in-strings-xml-invalid-symbol-continue

continueはJavaの予約語だからオブジェクトの名前に使っちゃいけないってことでした。

あ、そう。そういうのあったね…(´ω`)

という感じです。

bt_continue とかに名前を変更したら解決です。

Android エラー Application package ‘AndroidManifest.xml’ must have a minimum of 2 segments.

Android

Android SDK Platform 4.0.3

Android次のようなエラーがコンソールに出る時は

 Application package 'AndroidManifest.xml' must have 
 a minimum of 2 segments.

パッケージ名が2つのセグメントに分かれていないからです。

2つのセグメントに分かれる、というのは何か?というと

hogehoge

とかいうパッケージ名ではなく

hoge.hoge

のようにコンマで区切りましょうね!ということです。

Android アプリ開発 今どのぐらいの速度で動いているか

Android

Android アプリ開発 今どのぐらいの速度で動いているか

たとえば車の時速などをはかりたい時です。
最初は加速度センサーでやるのかと思っていましたが、加速度センサーだと取れる値が細かすぎます。

GPSを利用した、速度を計算する方法があるので、そちらの方が大まかな速度を取得する場合は簡単でしょう。

具体的にはLocationクラスのgetSpeed()関数を利用します。

http://developer.android.com/reference/android/location/Location.html#getSpeed%28%29

こんな感じです。

 //速度
 boolean has_speed;
 float speed;
 
 Location location = mgr.getLastKnownLocation(best);
 has_speed = location.hasSpeed();
 		
 if(has_speed){
    speed = location.getSpeed();
 }

ちなみに、これで取得できるのは秒速何メートルか、です。