0

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()によって呼び出されたメソッドStartUpSettings() Activity

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;
    }

Mainそれから私は呼び出されたを起動するAsyncTask呼び出したい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)
4

2 に答える 2

0

お嬢様、私はあなたの問題が何であるかわかりませんが、GPSの場合、私はこのチュートリアルhttp://thenewboston.org/list.php?cat=6を実行し、クラッシュすることなく正常に動作します。チュートリアルの場合、正確には100を少し超える必要があります。GPSのチュートリアルを見つける必要があります。これは、30分のチュートリアルです。これだといいの?

于 2012-02-26T18:38:16.713 に答える
0

結局、enableGPS()メソッドを自分のStartupSettingsアクティビティに移動し、ユーザーがGPSを有効にしたときstartActivityForResult()に開始するために使用しました。Main

それが理想的であるかどうかはわかりませんが、解決されました!

于 2012-02-26T20:35:29.567 に答える