允许服务时间启动

时间:2015-04-29 00:35:07

标签: android service null boot

我希望启用自动登录到我的应用程序,但出现的问题是在调用自动​​登录功能后服务正在启动和绑定:

04-28 20:21:09.061    5427-5427/com.example.feastapp I/PersonaManager﹕ getPersonaService() name persona_policy
04-28 20:21:09.081    5427-5427/com.example.feastapp V/AUTO LOGIN TEST﹕ Waiting... 1/5 @ 268919454
04-28 20:21:14.086    5427-5427/com.example.feastapp V/AUTO LOGIN TEST﹕ Waiting... 2/5 @ 268924454
04-28 20:21:19.081    5427-5427/com.example.feastapp V/AUTO LOGIN TEST﹕ Waiting... 3/5 @ 268929454
04-28 20:21:24.096    5427-5427/com.example.feastapp I/PersonaManager﹕ getPersonaService() name persona_policy
04-28 20:21:24.176    5427-5427/com.example.feastapp V/TEST GCM Service Login﹕ Service is NULL
04-28 20:21:24.236    5427-5427/com.example.feastapp D/dalvikvm﹕ GC_FOR_ALLOC freed 244K, 17% free 6485K/7812K, paused 15ms, total 15ms
04-28 20:21:24.296    5427-5427/com.example.feastapp D/dalvikvm﹕ GC_FOR_ALLOC freed 1069K, 26% free 6881K/9260K, paused 9ms, total 10ms
04-28 20:21:24.376    5427-5427/com.example.feastapp D/libEGL﹕ loaded /system/lib/egl/libEGL_mali.so
04-28 20:21:24.381    5427-5427/com.example.feastapp D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_mali.so
04-28 20:21:24.386    5427-5427/com.example.feastapp D/libEGL﹕ loaded /system/lib/egl/libGLESv2_mali.so
04-28 20:21:24.391    5427-5427/com.example.feastapp E/﹕ Device driver API match
    Device driver API version: 23
    User space API version: 23
04-28 20:21:24.391    5427-5427/com.example.feastapp E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Mon Feb 10 15:44:10 KST 2014
04-28 20:21:24.446    5427-5427/com.example.feastapp D/OpenGLRenderer﹕ Enabling debug mode 0
04-28 20:21:24.506    5427-5427/com.example.feastapp V/Service﹕ The service is connected

我在扩展应用程序类中有服务启动以提供服务时间,但它仍然在调用自动​​日志功能子句后启动。

登录类:

public class LoggingIn extends Activity {

    protected static final int NOT_CONNECTED_TO_SERVICE = 0;
    protected static final int FILL_BOTH_USERNAME_AND_PASSWORD = 1;
    public static final String AUTHENTICATION_FAILED = "0";
    public static final String FRIEND_LIST = "FRIEND_LIST";
    protected static final int MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT = 2;
    protected static final int NOT_CONNECTED_TO_NETWORK = 3;
    private EditText usernameText;
    private EditText passwordText;

    private JSONObject resultObject;
    public static String userId = null;

    private Manager imService;
    public static final int SIGN_UP_ID = Menu.FIRST;
    public static final int EXIT_APP_ID = Menu.FIRST + 1;

    // For GCM
    String regid;
    GoogleCloudMessaging gcm;
    AtomicInteger msgId = new AtomicInteger();
    SharedPreferences prefs;
    Context context;

    public static final String EXTRA_MESSAGE = "message";
    public static final String PROPERTY_REG_ID = "registration_id";
    private static final String PROPERTY_APP_VERSION = "appVersion";
    private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;

    private ServiceConnection mConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName className, IBinder service) {
            imService = ((MessagingService.IMBinder) service).getService();
            Log.v("Service", "The service is connected");


            if (imService.isUserAuthenticated() == true) {
                // Intent i = new Intent(LoggingIn.this, ListOfFriends.class);
                Intent i = new Intent(LoggingIn.this, MainActivity.class);
                startActivity(i);
                LoggingIn.this.finish();
            }
        }

        public void onServiceDisconnected(ComponentName className) {
            Log.v("Service", "The service is disconnected");
            imService = null;
            Toast.makeText(LoggingIn.this, R.string.local_service_stopped,
                    Toast.LENGTH_SHORT).show();
        }
    };

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
              /*
               * Start and bind the imService
               */
        bindService(new Intent(LoggingIn.this, MessagingService.class),
                mConnection, Context.BIND_AUTO_CREATE);


        // Initiate Volley:
        final RequestQueue requestQueue = VolleySingleton.getsInstance().getRequestQueue();

        //Remove title bar
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        //Remove notification bar
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        // For auto logging in:
        if (!SaveSharedPreference.getUserName(getApplicationContext()).isEmpty()) {

            for (int i = 0; i < 3; i++) {
                Log.v("AUTO LOGIN TEST",
                        "Waiting... " + (i + 1) + "/5 @ "
                                + SystemClock.elapsedRealtime());
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }

            }

            setContentView(R.layout.feast_loading_splash_page);

            final String userName = SaveSharedPreference.getUserName(getApplicationContext());

            final String password = SaveSharedPreference.getPassword(getApplicationContext());

            Log.v("TEST GCM Service Login", "SharedPref Username is " + userName + " and password " + password);

            if (imService == null) {
                Log.v("TEST GCM Service Login", "Service is NULL");
                Toast.makeText(getApplicationContext(),
                        R.string.not_connected_to_service,
                        Toast.LENGTH_LONG).show();
                // showDialog(NOT_CONNECTED_TO_SERVICE);
                //return;
            } else if (imService.isNetworkConnected() == false) {
                Log.v("TEST GCM Service Login", "imService.isNetworkConnected() == false");
                Toast.makeText(getApplicationContext(),
                        R.string.not_connected_to_network,
                        Toast.LENGTH_LONG).show();
                // showDialog(NOT_CONNECTED_TO_NETWORK);

            } else {

                Log.v("TEST GCM Service Login", "When imService is not null: SharedPref Username is " + userName + " and password " + password);

                Thread autoLoginThread = new Thread() {
                    private Handler handler = new Handler();

                    @Override
                    public void run() {
                        String result = null;

                        try {
                            result = imService.authenticateUser(
                                    userName.trim(),
                                    password.trim());
                        } catch (UnsupportedEncodingException e) {

                            e.printStackTrace();
                        }
                        if (result == null
                                || result.equals(AUTHENTICATION_FAILED)) {
                                      /*
                                       * Authenticatin failed, inform the user
                                       */
                            handler.post(new Runnable() {
                                public void run() {
                                    Toast.makeText(
                                            getApplicationContext(),
                                            R.string.make_sure_username_and_password_correct,
                                            Toast.LENGTH_LONG).show();

                                    // showDialog(MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT);
                                }
                            });

                        } else {                                      /*
                                       * if result not equal to authentication failed,
                                       * result is equal to friend and group list of
                                       * the user 0: is for friends, 1: is for groups
                                       */

                            handler.post(new Runnable() {
                                public void run() {
                                    Intent i = new Intent(LoggingIn.this,
                                            MainActivity.class);
                                    startActivity(i);
                                    LoggingIn.this.finish();

                                }
                            });

                        }

                    }
                };
                autoLoginThread.start();

            }

        }

        setContentView(R.layout.loggin_in);
        setContentView(R.layout.feast_login_page);
        //setTitle("Login");

        ImageButton loginButton = (ImageButton) findViewById(R.id.button1);

        // So don't need to log in manually, just click the button
        usernameText = (EditText) findViewById(R.id.username);
        passwordText = (EditText) findViewById(R.id.password);

        loginButton.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                if (imService == null) {
                    Toast.makeText(getApplicationContext(),
                            R.string.not_connected_to_service,
                            Toast.LENGTH_LONG).show();
                    // showDialog(NOT_CONNECTED_TO_SERVICE);
                    return;
                } else if (imService.isNetworkConnected() == false) {
                    Toast.makeText(getApplicationContext(),
                            R.string.not_connected_to_network,
                            Toast.LENGTH_LONG).show();
                    // showDialog(NOT_CONNECTED_TO_NETWORK);

                } else if (usernameText.length() > 0
                        && passwordText.length() > 0) {

                    Thread loginThread = new Thread() {
                        private Handler handler = new Handler();

                        @Override
                        public void run() {
                            String result = null;

                            try {
                                result = imService.authenticateUser(
                                        usernameText.getText().toString().trim(),
                                        passwordText.getText().toString().trim());
                            } catch (UnsupportedEncodingException e) {

                                e.printStackTrace();
                            }
                            if (result == null
                                    || result.equals(AUTHENTICATION_FAILED)) {
                                      /*
                                       * Authenticatin failed, inform the user
                                       */
                                handler.post(new Runnable() {
                                    public void run() {
                                        Toast.makeText(
                                                getApplicationContext(),
                                                R.string.make_sure_username_and_password_correct,
                                                Toast.LENGTH_LONG).show();

                                        // showDialog(MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT);
                                    }
                                });

                            } else {

                                      /*
                                       * if result not equal to authentication failed,
                                       * result is equal to friend and group list of
                                       * the user 0: is for friends, 1: is for groups
                                       */
                                handler.post(new Runnable() {
                                    public void run() {

                                        // If log in successful, then save
                                        // username and password to shared
                                        // preferences:

                                        SaveSharedPreference.setUserName(
                                                getApplicationContext(),
                                                usernameText.getText()
                                                        .toString());

                                        SaveSharedPreference.setPassword(
                                                getApplicationContext(),
                                                passwordText.getText()
                                                        .toString());

                                        Intent i = new Intent(LoggingIn.this,
                                                MainActivity.class);
                                        startActivity(i);
                                        LoggingIn.this.finish();

                                    }
                                });

                            }

                        }
                    };
                    loginThread.start();

                } else {
                          /*
                           * Username or Password is not filled, alert the user
                           */
                    Toast.makeText(getApplicationContext(),
                            R.string.fill_both_username_and_password,
                            Toast.LENGTH_LONG).show();
                    // showDialog(FILL_BOTH_USERNAME_AND_PASSWORD);
                }

                // GET the users id!!
                JsonObjectRequest getUserId = new JsonObjectRequest(Request.Method.GET,
                        "http://" + Global.getFeastOnline() + "/getUserData/" + usernameText.getText().toString() + ".json", ((String) null),
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {

                                // Parse the JSON:
                                try {
                                    resultObject = response.getJSONObject("userInfo");
                                    userId = resultObject.getString("id");

                                    Log.v("USER ID", "The user id is " + userId);

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }

                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                Log.d("Error.Response", error.toString());
                            }
                        });

                requestQueue.add(getUserId);

            }
        });
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        int message = -1;
        switch (id) {
            case NOT_CONNECTED_TO_SERVICE:
                message = R.string.not_connected_to_service;
                break;
            case FILL_BOTH_USERNAME_AND_PASSWORD:
                message = R.string.fill_both_username_and_password;
                break;
            case MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT:
                message = R.string.make_sure_username_and_password_correct;
                break;
            case NOT_CONNECTED_TO_NETWORK:
                message = R.string.not_connected_to_network;
                break;
            default:
                break;
        }

        if (message == -1) {
            return null;
        } else {
            return new AlertDialog.Builder(LoggingIn.this)
                    .setMessage(message)
                    .setPositiveButton(R.string.OK,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                                    /* User clicked OK so do some stuff */
                                }
                            }).create();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        unbindService(mConnection);
    }

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

        bindService(new Intent(LoggingIn.this, MessagingService.class),
                mConnection, Context.BIND_AUTO_CREATE);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        boolean result = super.onCreateOptionsMenu(menu);

        menu.add(0, SIGN_UP_ID, 0, R.string.sign_up);
        menu.add(0, EXIT_APP_ID, 0, R.string.exit_application);

        return result;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {

        switch (item.getItemId()) {
            case SIGN_UP_ID:
                Intent i = new Intent(LoggingIn.this, SigningUp.class);
                startActivity(i);
                return true;
            case EXIT_APP_ID:

                return true;
        }

        return super.onMenuItemSelected(featureId, item);
    }

}

1 个答案:

答案 0 :(得分:0)

我在ServiceConnection块中发布了自动登录代码。问题是服务只在onCreate块之后连接,因此在对它调用任何东西时它总是为NULL。

private ServiceConnection mConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName className, IBinder service) {
            imService = ((MessagingService.IMBinder) service).getService();
            Log.v("Service", "The service is connected");

            // Allowing autologin!!**********************************************************
            final String userName = SaveSharedPreference.getUserName(getApplicationContext());

            final String password = SaveSharedPreference.getPassword(getApplicationContext());

            Log.v("TEST GCM Service Login", "SharedPref Username is " + userName + " and password " + password);

            //Log.v("TEST GCM Service Login", "The value of imService is: " + imService.toString());

            if (imService == null) {
                Log.v("TEST GCM Service Login", "Service is NULL");
                Toast.makeText(getApplicationContext(),
                        R.string.not_connected_to_service,
                        Toast.LENGTH_LONG).show();
                // showDialog(NOT_CONNECTED_TO_SERVICE);
                //return;
            } else if (imService.isNetworkConnected() == false) {
                Log.v("TEST GCM Service Login", "imService.isNetworkConnected() == false");
                Toast.makeText(getApplicationContext(),
                        R.string.not_connected_to_network,
                        Toast.LENGTH_LONG).show();
                // showDialog(NOT_CONNECTED_TO_NETWORK);

            } else {

                Log.v("TEST GCM Service Login", "When imService is not null: SharedPref Username is " + userName + " and password " + password);

                Thread autoLoginThread = new Thread() {
                    private Handler handler = new Handler();

                    @Override
                    public void run() {
                        String result = null;

                        try {
                            result = imService.authenticateUser(
                                    userName.trim(),
                                    password.trim());
                        } catch (UnsupportedEncodingException e) {

                            e.printStackTrace();
                        }
                        if (result == null
                                || result.equals(AUTHENTICATION_FAILED)) {
                                      /*
                                       * Authenticatin failed, inform the user
                                       */
                            handler.post(new Runnable() {
                                public void run() {
                                    Toast.makeText(
                                            getApplicationContext(),
                                            R.string.make_sure_username_and_password_correct,
                                            Toast.LENGTH_LONG).show();

                                    // showDialog(MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT);
                                }
                            });

                        } else {                                      /*
                                       * if result not equal to authentication failed,
                                       * result is equal to friend and group list of
                                       * the user 0: is for friends, 1: is for groups
                                       */

                            handler.post(new Runnable() {
                                public void run() {
                                    Intent i = new Intent(LoggingIn.this,
                                            MainActivity.class);
                                    startActivity(i);
                                    LoggingIn.this.finish();

                                }
                            });

                        }

                    }
                };
                autoLoginThread.start();

            }

            if (imService.isUserAuthenticated() == true) {
                // Intent i = new Intent(LoggingIn.this, ListOfFriends.class);
                Intent i = new Intent(LoggingIn.this, MainActivity.class);
                startActivity(i);
                LoggingIn.this.finish();
            }
        }

        public void onServiceDisconnected(ComponentName className) {

            Log.v("Service", "The service is disconnected");
            imService = null;
            Toast.makeText(LoggingIn.this, R.string.local_service_stopped,
                    Toast.LENGTH_SHORT).show();
        }
    };