GPSが有効になっているとコードが正常に動作しますが、有効にする必要があるときは強制的にクラッシュします。 GPSが有効になっていないときに場所を取得しようとすることと何かが関係しています。 GPSを有効にするためにユーザーの設定を開くようにしようとしていますが、GPSを記録しようとしています(したがって強制的にクラッシュする)。GPSを有効にする必要があるときにコードを構造化する方法
メインと呼ぶ時期と場所がわかりません。
まずStartupSettings
が呼び出されます。
public class StartupSettings extends Activity{
boolean hasGps = false;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.startup_dialog);
checkGPS();
}
public void checkGPS()
{
LocationHandler2 lh = new LocationHandler2();
hasGps = lh.enableGPS(this);
if (hasGps == true)
{
TextView tv = (TextView) findViewById(R.id.checkGPSConnection);
tv.setTextColor(Color.GREEN);
}
}
によって呼び出さenableGPS()
方法上:私はそれから呼ばAsyncTask
起動したMain
を呼び出したい
public class LocationHandler2{
LocationManager mlocManager;
public boolean enableGPS(final StartupSettings main)
{
mlocManager = (LocationManager)main.getSystemService(Context.LOCATION_SERVICE);
if(!mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
//Ask the user to enable GPS
AlertDialog.Builder builder = new AlertDialog.Builder(main);
builder.setTitle("Location Manager");
builder.setMessage("Would you like to enable GPS?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Launch settings, allowing user to make a change
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
main.startActivity(i);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//No location service, no Activity
main.finish();
}
});
builder.create().show();
}
else
{
return true;
}
return true;
}
StartProcess()
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pages);
StartProcess sProcess = new StartProcess();
sProcess.execute(this);
}
StartProcess AsyncTask
:
public class StartProcess extends AsyncTask<Main, Void, Void>
{
@Override
protected Void doInBackground(Main... params) {
LocationHandler2 lh = new LocationHandler2();
try {
lh.getLocationStartEnd(params[0],0);
}
catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
Logcat:
02-26 17:33:31.264: E/AndroidRuntime(10560): FATAL EXCEPTION: AsyncTask #1
02-26 17:33:31.264: E/AndroidRuntime(10560): java.lang.RuntimeException: An error occured while executing doInBackground()
02-26 17:33:31.264: E/AndroidRuntime(10560): at android.os.AsyncTask$3.done(AsyncTask.java:200)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.lang.Thread.run(Thread.java:1096)
02-26 17:33:31.264: E/AndroidRuntime(10560): Caused by: java.lang.IllegalArgumentException: provider==null
02-26 17:33:31.264: E/AndroidRuntime(10560): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:653)
02-26 17:33:31.264: E/AndroidRuntime(10560): at mfc.generalguixapi8.LocationHandler2.getLocationStartEnd(LocationHandler2.java:120)
02-26 17:33:31.264: E/AndroidRuntime(10560): at mfc.generalguixapi8.StartProcess.doInBackground(StartProcess.java:13)
02-26 17:33:31.264: E/AndroidRuntime(10560): at mfc.generalguixapi8.StartProcess.doInBackground(StartProcess.java:1)
02-26 17:33:31.264: E/AndroidRuntime(10560): at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-26 17:33:31.264: E/AndroidRuntime(10560): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-26 17:33:31.264: E/AndroidRuntime(10560): ... 4 more
02-26 17:34:37.694: E/global(10620): Deprecated Thread methods are not supported.
02-26 17:34:37.694: E/global(10620): java.lang.UnsupportedOperationException
02-26 17:34:37.694: E/global(10620): at java.lang.VMThread.stop(VMThread.java:85)
02-26 17:34:37.694: E/global(10620): at java.lang.Thread.stop(Thread.java:1379)
02-26 17:34:37.694: E/global(10620): at java.lang.Thread.stop(Thread.java:1344)
02-26 17:34:37.694: E/global(10620): at mfc.generalguixapi8.SplashScreen$1.run(SplashScreen.java:36)
02-26 17:36:18.134: E/global(10713): Deprecated Thread methods are not supported.
02-26 17:36:18.134: E/global(10713): java.lang.UnsupportedOperationException
02-26 17:36:18.134: E/global(10713): at java.lang.VMThread.stop(VMThread.java:85)
02-26 17:36:18.134: E/global(10713): at java.lang.Thread.stop(Thread.java:1379)
02-26 17:36:18.134: E/global(10713): at java.lang.Thread.stop(Thread.java:1344)
02-26 17:36:18.134: E/global(10713): at mfc.generalguixapi8.SplashScreen$1.run(SplashScreen.java:36)
@NeetsあなたのLogcatを投稿してください... –
@Ankit投稿されたログcat – Neeta
あなたのGPSProvider = null、実際のデバイスにチェックインされています –