質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

351閲覧

AndroidアプリでGPSをオフにした場合の起動で強制終了することの回避について

HIROSHI0828

総合スコア6

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/01/25 11:36

以下の①→③方法でアンドロイドアプリを起動した場合、強制終了されます。
①Android端末のGPS機能をオフにする。
②アプリケーションをインストール
③アプリケーション起動

GPSをONにした場合は問題なく起動できます。
マニュフェストファイルとメインアクティビティ上のGPS関連ソースは
以下の通りです。

GPSをオフにしたままのインストール→起動で強制終了を回避する方法が
わかる方がいたら御教授いただければ幸いです。

【マニュフェスト.xml】
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.CONTROL_LOCATION_UPADTES"/>

【メインアクティビティ.java】
getAPIData()の中で、getLocation()を呼んでいます。

// 現在位地からの緯度経路取得
private Map<String,Double> getAPIData() {

double latitude; double longitude; try { locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); // Criteriaオブジェクトを生成 Criteria criteria = new Criteria(); // Accuracyを指定(低精度) criteria.setAccuracy(Criteria.ACCURACY_COARSE); // PowerRequirementを指定(低消費電力) criteria.setPowerRequirement(Criteria.POWER_LOW); // ロケーションプロバイダの取得 String provider = locationManager.getBestProvider(criteria, true); locationManager.requestLocationUpdates(provider, 0, 0, onLocationUpdate); location = getLocation(); latitude = location.getLatitude(); longitude = location.getLongitude();

//////// //テストドライバ
// latitude = 35.678156;
// longitude = 139.705678;
////// //テストドライバエンド

locmap.put("latitude",latitude); locmap.put("longitude",longitude); }catch(Exception e) { return null; } return locmap; } //GPSによる緯度・経路取得 private Location getLocation() { Location lc = null; Location lcgps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); Location lcnet = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if(mylocation != null) { lc = mylocation; }else if(lcgps != null) { lc = lcgps; }else if(lcnet != null) { lc = lcnet; } return lc; } private LocationListener onLocationUpdate = new LocationListener() { public void onLocationChanged(Location location) { mylocation = location; } public void onProviderDisabled(String provider) { } public void onProviderEnabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { } };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

現状どこが原因で強制終了しているかもよくわからないのであれば、丁寧に1行ずつ実行したり、
怪しい箇所をtry-catchで囲んでcatchでe.printStackTrace()を実行してみるのがいいかと思います

ここからは私の推測ですが、
GPSがOFFの場合、getLocation()内でGPSにアクセスできないため何らかの例外を投げる
→その例外はgetAPIData()内でキャッチされ、getAPIData()はnullを返す
→その戻り値を利用しようとしたがnullであるため、NullPointerExceptionが発生
→その例外を処理できないため、強制終了
この可能性が一番高いように思います

投稿2015/01/25 17:23

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HIROSHI0828

2015/02/01 07:51

swordoneさん アドバイスありがとうございます。 ほぼ御指摘通りで、例外処理を入れていなかったことに起因しました。 実機テスト時、GPS有りきでアプリをテストしていたため、気がつきませんでした。 実機デバックは時間の関係でできませんでしたが、強制終了を回避するよう例外処理を加えました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問