Autore Topic: Creazione di una SplashScreen  (Letto 358 volte)

Offline giupardeb

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Glaxy Note 4
Creazione di una SplashScreen
« il: 09 Agosto 2015, 11:49:07 CEST »
0
Buongiorno ragazzi, volevo creare una splashScreen della mia applicazione, che attenda il completamento di alcuni comandi, prima di passare all'activity successiva, precisamente deve:

1. controllare se il GPS e internet sono attivi, ed eventualmente farli attivare dall'utente.
2. fare un controllo con un AsyncTask su un Database.

Riesco a controllare se GPS e internet sono attivi, riesco ad fare entrare l'utente direttamente nella sezione opportuna per attivare il GPS o internet, e ho creato un AsyncTask per controllare il DB. Questo è il codice:

Codice: [Seleziona]
package com.ppesoft.fotolocation;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ProgressBar;

import com.ppesoft.fotolocation.camera.CameraActivityMain;
import com.ppesoft.fotolocation.gps.GpsTracker;

import java.io.File;


public class SplashScreen extends Activity {
    private MioDbHelper db;
    private ProgressBar pb;
    private Cursor c;
    private SQLiteDatabase DB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //permette il fullscreen in maniera costante
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_splash_screen);

        pb = (ProgressBar) findViewById(R.id.progressBar);
        db = new MioDbHelper(getApplicationContext());

        DB = db.getWritableDatabase();
        c = DB.rawQuery("SELECT path FROM foto", null);

        //TODO DEVO FAR ATTENDERECHE IL GPS SI ATTIVI.

        if (!isOnline()) showNetworkSettingsAlert();

    //    if (!hasGps()) showGpsSettingsAlert();

        new spalsh().execute();
    }


    private boolean isOnline() {
        ConnectivityManager cm =
                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        return netInfo != null && netInfo.isConnectedOrConnecting();
    }

    private boolean hasGps() {
        GpsTracker gps = new GpsTracker(getApplicationContext());

        boolean flag = false;
        if (gps.getLocation(LocationManager.GPS_PROVIDER) != null) {
            flag = true;
        }
        return flag;
    }

    private void showGpsSettingsAlert() {

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(SplashScreen.this);
        alertDialog.setTitle("SETTINGS GPS");
        alertDialog.setMessage("Abilita il GPS");
        alertDialog.setCancelable(false);

        alertDialog.setPositiveButton("Settings",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(
                                Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        SplashScreen.this.startActivity(intent);
                    }
                });
        alertDialog.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        //chiude applicazione
                        SplashScreen.this.finish();
                    }
                });
        alertDialog.show();
    }

    private void showNetworkSettingsAlert() {

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(SplashScreen.this);
        alertDialog.setTitle("SETTINGS NETWORK");
        alertDialog.setMessage("Abilita la connessione di rete");
        alertDialog.setCancelable(false);

        alertDialog.setPositiveButton("Settings",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(
                                Settings.ACTION_WIRELESS_SETTINGS);
                        SplashScreen.this.startActivity(intent);
                    }
                });
        alertDialog.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        //TODO chiudere applicazione
                        SplashScreen.this.finish();
                    }
                });
        alertDialog.show();
    }


    private class spalsh extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected Void doInBackground(Void... params) {

            //Check DataBase
            String whereClause = "path = ?";

            while (c.moveToNext()) {

                File file = new File(c.getString(0));
                if (!file.exists()) {
                    String whereArgs[] = {c.getString(0)};
                    DB.delete("foto", whereClause, whereArgs);
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            DB.close();
            //avviare activity CameraPreview

            Intent i = new Intent(SplashScreen.this, CameraActivityMain.class);
            startActivity(i);

            // close this activity
            finish();


        }
    }
}

Il problema è che la maggior parte delle volte non riesco a far visualizzare il dialog per far attivare all'utente il gps, perché il thread finisce molto prima e quindi passa direttamente all'activity successiva. Come posso fare in modo che tutte le operazioni vengano effettuate, ma sopratutto come faccio a fare in modo che la splashscreen rimanga fino a quando il gps non si è collegato? SPero di essere stato chiaro. Per qualsiasi cosa non esitate a chiedere.
Buona giornata  ;-)