简体   繁体   中英

Android app not opening from launch activity

I have an app which first logs in the user with firebase and then proceeds to the mainactivity. Initially I didn't have the log in feature and so the app began from mainactivity. Once I added the login activity, and tested it with my phone, it worked just fine. But after reinstalling the app, it doesn't open from login activity. It starts from the mainactivity and asks for permissions. I have done the necessary changes to Android manifest and im sure it's right. Yet it doesn't work. And I'm a beginner so please explain any solutions in detail. Thanks!

PS: im using Google location services. mypp has to request permissions for fine location, internal storage,etc. These permissions are located in Mainactivity. Code of MainActivity and LoginActivity is given below:

package com.sitepoint.example02;
        import android.Manifest;
        import android.content.Context;
        import android.content.Intent;
        import android.content.pm.PackageManager;
        import android.net.ConnectivityManager;
        import android.net.NetworkInfo;
        import android.net.Uri;
        import android.os.Build;
        import android.os.CountDownTimer;
        import android.os.Environment;
        import android.provider.MediaStore;
        import android.support.v4.app.ActivityCompat;
        import android.support.v4.content.ContextCompat;
        import android.util.Log;
        import android.widget.ImageView;
        import android.widget.ProgressBar;
        import android.widget.TextView;
        import android.os.Bundle;
        import android.view.View;
        import android.widget.Button;

        import java.io.File;


        import android.location.Location;
        import android.support.v7.app.AppCompatActivity;
        import android.widget.Toast;

        import com.google.android.gms.common.ConnectionResult;
         import com.google.android.gms.common.api.GoogleApiClient;
        import com.google.android.gms.location.FusedLocationProviderApi;
        import com.google.android.gms.location.LocationListener;
        import com.google.android.gms.location.LocationRequest;
        import com.google.android.gms.location.LocationServices;
        import com.google.firebase.auth.FirebaseAuth;

        import static com.sitepoint.example02.R.id.initiate;
        import static com.sitepoint.example02.R.id.textView16;

    public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {




        private FirebaseAuth auth;

        private static final String TAG = "MainActivity";
        private GoogleApiClient mGoogleApiClient;
        private LocationRequest mLocationRequest;


        private boolean permissionIsGranted = false;
        private FusedLocationProviderApi LocationProvider = LocationServices.FusedLocationApi;
        private static final int MY_PERMISSIONS_REQUEST_FINE_LOCATION = 101;
        private static final int MY_PERMISSIONS_REQUEST_COARSE_LOCATION = 102;
        private Uri file;
        TextView vv;
        String latt;
        String longit;
        Button b;
        int threshld1 = 0;
        int threshld = 0;
        int skipped = 0;
        int locationdata=0;
        String close;
        int i = 0;

    Button myresdone;
        private ImageView whitee;
        private ImageView logo;
        private Button register;
        private Button skipbut;
        private Button takePictureButton;
        private ImageView imageView;
        Boolean a;
        TextView signout;
        TextView txt16;
        String useridd="";
        //private FirebaseAuth user;
    private ProgressBar pbb;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
           //user=FirebaseAuth.getInstance();

            auth=FirebaseAuth.getInstance();
            pbb=(ProgressBar)findViewById(R.id.progressBar2) ;
            signout=(TextView)findViewById(R.id.signout);
            signout.setEnabled(false);
            signout.setVisibility(View.INVISIBLE);
            close = getIntent().getStringExtra("c");
            if (close == "c")
                finish();
            whitee = (ImageView) findViewById(R.id.wholepage);
            logo = (ImageView) findViewById(R.id.logo);
            takePictureButton = (Button) findViewById(R.id.button_image);
            register = (Button) findViewById(R.id.button3);
            txt16=(TextView)findViewById(textView16);
            myresdone = (Button) findViewById(R.id.button6);
            skipbut = (Button) findViewById(R.id.button5);
            skipbut.setEnabled(false);
            skipbut.setVisibility(View.INVISIBLE);
            vv = (TextView) findViewById(R.id.textView);
            takePictureButton.setEnabled(false);
            register.setEnabled(false);
            register.setVisibility(View.INVISIBLE);
            takePictureButton.setVisibility(View.INVISIBLE);
            vv.setEnabled(false);
            myresdone.setVisibility(View.INVISIBLE);
            myresdone.setEnabled(false);

            //getting user account id
            useridd = auth.getCurrentUser().getUid();
            vv.setVisibility(View.INVISIBLE);

            new CountDownTimer(1000, 1000) {

                public void onTick(long millisUntilFinished) {


                }

                public void onFinish() {


                /*    if (system==null) {
                        auth.signOut();
                        register.setVisibility(View.INVISIBLE);
                        register.setEnabled(false);
                        initiate.setVisibility(View.VISIBLE);
                        if (i == 1 && threshld1 != 1 && threshld != 1)
                            initiate.setEnabled(true);
                    } else {
                        useridd = auth.getCurrentUser().getUid();
                        txt16.setText(useridd);*/


                        a = fileExistance(useridd + ".txt");

                        if (!a) {

                            register.setVisibility(View.VISIBLE);
                             if(i == 1 && threshld1 != 1 && threshld != 1)
                              register.setEnabled(true);


                        } else {
                            skipbut.setVisibility(View.VISIBLE);
                            takePictureButton.setVisibility(View.VISIBLE);
                            myresdone.setVisibility(View.VISIBLE);
                            pbb.setVisibility(View.VISIBLE);
                            if (i == 1 && threshld1 != 1 && threshld != 1 && locationdata == 1) {
                                takePictureButton.setEnabled(true);
                                skipbut.setEnabled(true);
                                signout.setEnabled(true);
                                signout.setVisibility(View.VISIBLE);
                                myresdone.setEnabled(true);
                                pbb.setVisibility(View.INVISIBLE);

                            }
                            vv.setEnabled(true);
                            vv.setVisibility(View.VISIBLE);
                            whitee.setVisibility(View.INVISIBLE);
                            whitee.setEnabled(false);
                            logo.setVisibility(View.INVISIBLE);
                            logo.setEnabled(false);
                        }
                    }


            }.start();



            imageView = (ImageView) findViewById(R.id.imageview);


            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
            mLocationRequest = new LocationRequest();
            mLocationRequest.setInterval(5000);
            mLocationRequest.setFastestInterval(3000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

             myresdone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i=new Intent(MainActivity.this, myresdone.class);
            i.putExtra("useridd",useridd);
            startActivity(i);
        }
    });

            signout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                 auth.signOut();
                    startActivity(new Intent(MainActivity.this, LoginActivity.class));
                    finish();
                }
            });
            register.setOnClickListener(new View.OnClickListener() {
                public void onClick(View arg0) {

                    Intent rg = new Intent(MainActivity.this, Main5Activity.class);
                    rg.putExtra("useridd", useridd);
                    startActivity(rg);

                }
            });

            skipbut.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(MainActivity.this, Main2Activity.class);
                    i.putExtra("latt", latt);
                    i.putExtra("longit", longit);
                    skipped = -2;
                    i.putExtra("useridd", useridd);
                    i.putExtra("skipped", skipped);
                    startActivity(i);
                    finish();
                }
            });
            b = (Button) findViewById(R.id.btnClick);
            b.setEnabled(false);
            b.setVisibility(b.INVISIBLE);
            b.setOnClickListener(new View.OnClickListener() {
                public void onClick(View arg0) {

                    Intent i = new Intent(MainActivity.this, Main2Activity.class);
                    i.putExtra("latt", latt);
                    i.putExtra("longit", longit);
                    i.putExtra("useridd", useridd);
                    startActivity(i);
                    finish();

                }
            });
            LocationManager_check locationManagerCheck = new LocationManager_check(
                    this);
            Location location = null;
             Boolean internet=isOnline();
            if (locationManagerCheck.isLocationServiceAvailable()==false && internet==false ) {
                //locationManagerCheck.createLocationServiceError(MainActivity.this);
                Toast.makeText(MainActivity.this, "Internet and location access unavailable!", Toast.LENGTH_LONG).show();

            }
            else if(locationManagerCheck.isLocationServiceAvailable()==false && internet==true ) {
                //locationManagerCheck.createLocationServiceError(MainActivity.this);
                Toast.makeText(MainActivity.this, "location access unavailable!", Toast.LENGTH_LONG).show();

            }
            else if(locationManagerCheck.isLocationServiceAvailable()==true && internet==false ) {
                //locationManagerCheck.createLocationServiceError(MainActivity.this);
                Toast.makeText(MainActivity.this, "Internet connection unavailable!", Toast.LENGTH_LONG).show();

            }
            else if (locationManagerCheck.isLocationServiceAvailable() == true && isOnline()==true) {
                i = 1;


            }



        }


        //some required functions
        public boolean fileExistance(String fname) {
            File file = getBaseContext().getFileStreamPath(fname);
            return file.exists();
        }


       @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

            if (requestCode == 0) {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                        && grantResults[1] == PackageManager.PERMISSION_GRANTED && grantResults[2] == PackageManager.PERMISSION_GRANTED) {

                } else {
                    register.setEnabled(false);
                    takePictureButton.setEnabled(false);
                    skipbut.setEnabled(false);
                    threshld1 = 1;
                }
            } else if (requestCode == MY_PERMISSIONS_REQUEST_FINE_LOCATION) {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED && grantResults[2] == PackageManager.PERMISSION_GRANTED) {
                    permissionIsGranted = true;
                } else {
                    permissionIsGranted = false;
                    Toast.makeText(getApplicationContext(), "This app requires all three permissions to be granted", Toast.LENGTH_SHORT).show();
                    register.setEnabled(false);
                    takePictureButton.setEnabled(false);
                    skipbut.setEnabled(false);
                    threshld1 = 1;
                }
            }

        }


        public void takePicture(View view) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            file = Uri.fromFile(getOutputMediaFile());

            intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

            startActivityForResult(intent, 100);
        }

        private static File getOutputMediaFile() {
            File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES), "CameraDemo");

            if (!mediaStorageDir.exists()) {
                if (!mediaStorageDir.mkdirs()) {
                    Log.d("CameraDemo", "failed to create directory");
                    return null;
                }
            }
            return new File(mediaStorageDir.getPath() + File.separator + "hsr.jpg");


        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == 100) {
                if (resultCode == RESULT_OK) {
                    imageView.setImageURI(file);
                    vv.setVisibility(View.INVISIBLE);
                    if (i == 1) {
                        b.setEnabled(true);
                        b.setVisibility(b.VISIBLE);
                        takePictureButton.setEnabled(false);
                        takePictureButton.setVisibility(takePictureButton.INVISIBLE);
                        skipbut.setEnabled(false);
                        myresdone.setEnabled(false);
                        myresdone.setVisibility(View.INVISIBLE);
                        skipbut.setVisibility(View.INVISIBLE);

                    }
                }
            }
        }
        //Location code
    /////////////////////////////////////////////////////////////////////////////////////////


        @Override
        protected void onStart() {
            super.onStart();
            mGoogleApiClient.connect();
        }

        protected void onResume() {
            super.onResume();
            if (permissionIsGranted) {
                if (mGoogleApiClient.isConnected()) {
                    RequestLocationUpdates();
                }
            }
        }

        protected void onPause() {
            super.onPause();
            if (permissionIsGranted)
                LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
        }

        @Override
        protected void onStop() {
            super.onStop();
            if (permissionIsGranted)
                mGoogleApiClient.disconnect();

        }

        @Override
        public void onConnected(Bundle bundle) {
            RequestLocationUpdates();
        }

        private void RequestLocationUpdates() {
            if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) || ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ) {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.CAMERA,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_FINE_LOCATION);
                } else {
                    permissionIsGranted = true;
                }
                return;
            }

            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        }

        @Override
        public void onConnectionSuspended(int i) {
            Log.i(TAG, "Connection Suspended");
            mGoogleApiClient.connect();
        }

        @Override
        public void onLocationChanged(Location location) {

            latt = String.valueOf(location.getLatitude());
            longit = String.valueOf(location.getLongitude());
    locationdata=1;
            if (i == 1 && threshld1 != 1 && threshld != 1 &&locationdata==1) {
                takePictureButton.setEnabled(true);
                skipbut.setEnabled(true);
                myresdone.setEnabled(true);
                signout.setEnabled(true);
                signout.setVisibility(View.VISIBLE);
                pbb.setVisibility(View.INVISIBLE);
            }

        }


        @Override
        public void onConnectionFailed(ConnectionResult connectionResult) {
            Log.i(TAG, "Connection failed. Error: " + connectionResult.getErrorCode());
        }


        public boolean isOnline() {
            ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = conMgr.getActiveNetworkInfo();

            if(netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()){

                return false;
            }
            return true;
        }
    }

Login Activity:

package com.sitepoint.example02;


import android.text.TextUtils;
import android.widget.Toast;
        import android.content.Intent;
        import android.os.Bundle;
        import android.support.annotation.NonNull;
        import android.support.v7.app.AppCompatActivity;

        import android.view.View;
        import android.widget.Button;
        import android.widget.EditText;
        import android.widget.ProgressBar;
        import android.widget.Toast;


import com.google.android.gms.tasks.OnCompleteListener;
        import com.google.android.gms.tasks.Task;
        import com.google.firebase.auth.AuthResult;
        import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity  {
    private EditText inputEmail, inputPassword;
    private FirebaseAuth auth;
    private ProgressBar progressBar;
    private Button btnSignup, btnLogin, btnReset;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Get Firebase auth instance
        auth = FirebaseAuth.getInstance();

      if (auth.getCurrentUser() != null) {
            Intent i=new Intent(LoginActivity.this, MainActivity.class);

          startActivity(i);

            finish();
        }
        // the above code checks whether the same person had previously logged in and therefore loads previous profile*********

        // set the view now
        setContentView(R.layout.activity_login);

        // Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        // setSupportActionBar(toolbar);

        inputEmail = (EditText) findViewById(R.id.email);
        inputPassword = (EditText) findViewById(R.id.password);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        btnSignup = (Button) findViewById(R.id.btn_signup);
        btnLogin = (Button) findViewById(R.id.btn_login);
        btnReset = (Button) findViewById(R.id.btn_reset_password);

        //Get Firebase auth instance
        auth = FirebaseAuth.getInstance();

        btnSignup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this, signupactivity.class));
            }
        });

        btnReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this, ResetPasswordActivity.class));
            }
        });

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = inputEmail.getText().toString();
                final String password = inputPassword.getText().toString();

                if (TextUtils.isEmpty(email)) {
                    Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (TextUtils.isEmpty(password)) {
                    Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
                    return;
                }

                progressBar.setVisibility(View.VISIBLE);

                //authenticate user
                auth.signInWithEmailAndPassword(email, password)
                        .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                // If sign in fails, display a message to the user. If sign in succeeds
                                // the auth state listener will be notified and logic to handle the
                                // signed in user can be handled in the listener.
                                progressBar.setVisibility(View.GONE);
                                if (!task.isSuccessful()) {
                                    // there was an error
                                    if (password.length() < 6) {
                                        inputPassword.setError(getString(R.string.minimum_password));
                                    } else {
                                        Toast.makeText(LoginActivity.this, getString(R.string.auth_failed), Toast.LENGTH_LONG).show();
                                    }
                                } else {
                                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);

                                    startActivity(intent);
                                    finish();
                                }
                            }
                        });
            }
        });
    }



}

Manifest

<?xml version="1.0" encoding="utf-8"?>

<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="AniNet"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity
        android:name=".LoginActivity"
        android:configChanges="orientation"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Main2Activity"
        android:configChanges="orientation"
        android:screenOrientation="portrait" />
    <activity
        android:name=".Main3Activity"
        android:configChanges="orientation"
        android:screenOrientation="portrait" />
    <activity
        android:name=".Main5Activity"
        android:configChanges="orientation"
        android:screenOrientation="portrait" />
    <activity
        android:name=".MainActivity"
        android:configChanges="orientation"
        android:screenOrientation="portrait" />
    <activity
        android:name=".signupactivity"
        android:configChanges="orientation"
        android:screenOrientation="portrait" />
    <activity android:name=".myresdone" />
    <activity android:name=".myresinfo" />
    <activity android:name=".ResetPasswordActivity"></activity>
</application>

So, make sure you have added intent.action in android manifest file.

eg:

  <activity android:name=".activities.LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

You do launch from Login, then call if(auth.getCurrentUser != null){ start mainActivity} you aren't waiting for authorization. Your basically skipping login, but it is starting with login.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM