кнопка входа не работает после разрешения доступа к файлам, предоставленным в приложении для Android - PullRequest
0 голосов
/ 13 ноября 2018

Эта проблема существует только во время первого запуска приложения после установки, когда кнопка входа в систему не работает после разрешения на доступ к файлам, при следующем запуске приложения кнопка входа в систему работает отлично.Может ли кто-нибудь, пожалуйста, скажите мне, что это за проблема, связанная с этим.

Предоставление кода для входа в систему

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    if(Build.VERSION.SDK_INT>=24){
        try{
            Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
            m.invoke(null);
        }catch(Exception e){
            e.printStackTrace();
        }
    }



    int hasWriteContactsPermissionW = ContextCompat.checkSelfPermission(login.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (hasWriteContactsPermissionW != PackageManager.PERMISSION_GRANTED) {
        if (!ActivityCompat.shouldShowRequestPermissionRationale(login.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            showMessageOKCancel("You need to allow access to Files", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ActivityCompat.requestPermissions(login.this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSIONS);
                }
            });

            return;
        }
        ActivityCompat.requestPermissions(login.this,
                new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
                REQUEST_CODE_ASK_PERMISSIONS);

        return;
    }

    loginbtn = findViewById(R.id.loginbtn);

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

            Log.d("MMMMMM", "CLICKEDDD");

            loginbtn.setVisibility(View.GONE);

            EditText emailtxt = findViewById(R.id.emailtxt);
            String email = emailtxt.getText().toString();

            EditText passtxt = findViewById(R.id.passwordtxt);
            String pass = passtxt.getText().toString();


            GlobalVar.hash = String.valueOf(hashing.md5encrypt(email + pass));

            Connect();
        }
    });

1 Ответ

0 голосов
/ 13 ноября 2018

Ваш код не запускается сначала. Это связано с тем, что средство проверки разрешений останавливает выполнение при предоставлении разрешения при первом запуске. Я скопировал ваш фрагмент кода и прокомментировал строку

if (hasWriteContactsPermissionW != PackageManager.PERMISSION_GRANTED) {
    if(.....) {
        // .... your code 
    }

    return; // this statement terminates (stops ?) the function
    // solution is to remove this line 
}

// these lines are never reached because of the return; above
loginbtn = findViewById(R.id.loginbtn);

Решение:

  1. Проверка разрешений в конце onCreate
  2. Удалить return; из блока, в котором вы проверяете права доступа

Модифицированный код:

@Override protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_login);

 if (Build.VERSION.SDK_INT >= 24) {
  try {
   Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
   m.invoke(null);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 // moved this above
 loginbtn = findViewById(R.id.loginbtn);
 loginbtn.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

   Log.d("MMMMMM", "CLICKEDDD");

   loginbtn.setVisibility(View.GONE);

   EditText emailtxt = findViewById(R.id.emailtxt);
   String email = emailtxt.getText().toString();

   EditText passtxt = findViewById(R.id.passwordtxt);
   String pass = passtxt.getText().toString();


   GlobalVar.hash = String.valueOf(hashing.md5encrypt(email + pass));

   Connect();
  }
 });

 // moved this below
 int hasWriteContactsPermissionW = ContextCompat.checkSelfPermission(login.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
 if (hasWriteContactsPermissionW != PackageManager.PERMISSION_GRANTED) {
  if (!ActivityCompat.shouldShowRequestPermissionRationale(login.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
   showMessageOKCancel("You need to allow access to Files", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     ActivityCompat.requestPermissions(login.this, new String[] {
      Manifest.permission.WRITE_EXTERNAL_STORAGE
     }, REQUEST_CODE_ASK_PERMISSIONS);
    }
   });

   return;
  }
  ActivityCompat.requestPermissions(login.this,
   new String[] {
    Manifest.permission.WRITE_EXTERNAL_STORAGE
   },
   REQUEST_CODE_ASK_PERMISSIONS);

  return;
 }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...