カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

GPS機能設定の状態を取得(ネットワーク)

GPS機能についてはこちら1828

端末自身の[設定]-[位置情報とセキュリティ]より、「Wi-Fi/モバイルネットワークで位置を検出」がONに設定されているかを取得します。
OFFに設定されている場合にダイアログを表示して設定画面を呼び出す処理をしています。

// 位置情報設定の状態を取得
String GpsStatus = android.provider.Settings.Secure.getString(getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);

if (GpsStatus.indexOf("network", 0) < 0) {
  //Wi-Fi/モバイルネットワークで位置を検出が無効だった場合
  AlertDialog.Builder ad = new AlertDialog.Builder(this);
  ad.setMessage("Wi-Fi/モバイルネットワークで\n位置を検出する機能がOFFになっています。\n設定画面を開きますか?");
  ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
      //設定画面を呼び出す
      Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
      startActivity(intent);
    }
  });
  ad.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog,int whichButton) {
      //何もしない
      }
  });
  ad.create();
  ad.show();
} else if {
} else {
  //有効だった場合
}

API Level3(Android 1.5)以降、セキュリティ上の問題で設定を強制的に変更することはできません。

3,993 views

Activity間のデータ受け渡し

MyActivity.java

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("EXNAME", "example");
intent.putExtra("EXINT", 30);
startActivity(intent);

NextActivity.java

Intent intent = getIntent();
String exname = intent.getStringExtra("EXNAME");
int exint = intent.getIntExtra("EXINT", [デフォルト値]);
2,232 views

カメラのエラー setparameters faild

android/1683で紹介していた方法で
エラーが発生したので修正しました。

surfaceChanged内のsetPreviewSizeメソッドでエラー発生
元は以下のようなコード

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    Camera.Parameters parameters = mCamera.getParameters();
    parameters.setPreviewSize(w, h);
    mCamera.setParameters(parameters);
    mCamera.startPreview();
}

続きを読む…»

4,876 views

Honeycomb Cursor関連のエラー

SQLiteデータベースを扱うアプリをAndroid3.2搭載の端末に入れていてエラーが発生した。
詳細は省略しますが、以下のようなエラーが出ます。
RuntimeException: Unable to resume activity
IllegalStateException: trying to requery an already closed cursor

クエリを実行しようとしたが、カーソルが閉じているとエラーが出ています。
どうやらカーソルマネージャー機能がなくなったよう。

というわけで、マネージャーを使うのをやめ、クローズ処理をアクティビティのonDestroy()に集約。
これでエラーは解消された。

Android2.2、2.3では正常に動作するので、バージョン違いの互換性による問題のようです。
代わりのメソッドが用意されている場合もあるので、Reflectクラスを利用すれば互換性を持たせることは可能なようです。

参考?
http://d.hatena.ne.jp/ukiki999/20100524/p1

1,897 views

Webサービスとの連携

org.apache.httpクラスを使ってHTTP通信をおこないます。

AndroidManifest.xmlにインターネット接続許可の記述を追加します。

<uses-permission android:name="android.permission.INTERNET" />

Getメソッド

public String doGet( String url )
{
    try
    {
        HttpGet method = new HttpGet( url );

        DefaultHttpClient client = new DefaultHttpClient();

        // ヘッダを設定する
        method.setHeader( "Connection", "Keep-Alive" );

        HttpResponse response = client.execute( method );
        int status = response.getStatusLine().getStatusCode();
        if ( status != HttpStatus.SC_OK )
            throw new Exception( "" );

        return EntityUtils.toString( response.getEntity(), "UTF-8" );
    }
    catch ( Exception e )
    {
        return null;
    }
}

続きを読む…»

6,919 views