0

Je souhaite appeler les autorisations d'exécution pour lire les contacts lors d'un clic sur une vue. Donc, je vérifie si l'application a les autorisations et si elle ne demande pas les autorisations. Mais lorsque la boîte de dialogue de demande apparaît, l'activité devient noire et se termine si vous cliquez sur Autoriser ou Refuser dans la boîte de dialogue. Lorsque je débogue l'application, elle ne passe pas à la méthode onRequestPermissionsResult après avoir cliqué sur allow ou deny.L'activité devient noire lors de l'appel des autorisations d'exécution

J'appelle également l'Intention de contact si les autorisations sont acceptées. Je veux les montrer dans la même activité qu'une liste de contacts sélectionnés. Donc pour cela, j'ai une liste et des contacts ajoutés à la méthode onActivitResult. Mais pour cela aussi si je sélectionne un contact à partir des contacts, l'activité se termine. Il dose pas aller à la méthode onActivityResult.

public class PlanEventActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener, 
     DatePickerDialog.OnDateSetListener { 

    private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100; 
    private boolean mHoursMode, updateEvent, subevent,permissionsAccepted; 
    RelativeLayout chooseEvent, time, date; 
    EditText eventName, chooseEventText, timeTextView, dateTextView; 
    private RelativeLayout parent; 
    static final int CUSTOM_DIALOG_ID = 0; 
    private String mEventId, mMainEventId; 
    ListView dialog_ListView; 
    private Intent mIntent; 
    private SharedPreferences sharedPreferences; 
    private TextView title; 
    private ImageView addOrganizer; 
    private ArrayList<Organizers> mSelectedContacts; 
    private RecyclerViewAdapter mAdapter; 
    private RecyclerView mContactsList; 
    private ArrayList<Event> subEventArrayList; 
    public static final String MyPREFERENCES = "MyPrefs1"; 
    private Button mSubmit; 
    private String mEventType, mEventName, mEventDate, mEventTime, mOraganizerName, mOrganizerPhone, 
      mOrganizersId, mOrganizersEmail, mOrganizersLastName, mOrganizerFirstName, userName; 
    private Event mEvent; 
    private static final int RESULT_PICK_CONTACT = 10; 
    private Organizers mOrganizers; 
    private ImageButton add; 

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

     mIntent = getIntent(); 

     subEventArrayList = new ArrayList<>(); 

     setUpUI(); 

     mContactsList.setLayoutManager(new LinearLayoutManager(this)); 

     mAdapter = new RecyclerViewAdapter(this, mSelectedContacts); 
     mContactsList.setAdapter(mAdapter); 
     ((RecyclerViewAdapter) mAdapter).setMode(Attributes.Mode.Single); 


    } 

    public void setUpUI() { 

     addOrganizer = (ImageView) findViewById(R.id.addOrganizer); 

     mContactsList = (RecyclerView) findViewById(R.id.selectedContactsList); 

     mSubmit = (Button) findViewById(R.id.submit); 

     add = (ImageButton) findViewById(R.id.addButton); 

     mSelectedContacts = new ArrayList<>(); 

     updateEvent = mIntent.getBooleanExtra("updateEvent", false); 

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

       sharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 

       permissionsAccepted = sharedPreferences.getBoolean("permission1",false); 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 

        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); 
        //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method 
       } 
       else if (permissionsAccepted && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
        startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 
       } 
       else { 

        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
        startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 

       } 
      } 
     }); 

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

       sharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 

       permissionsAccepted = sharedPreferences.getBoolean("permission1",false); 


       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 

        Log.d("request","Request permission is called"); 

        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); 

       } 
       else if (permissionsAccepted && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
        startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 
       } 
       else { 

        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
        startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 

       } 

      } 
     }); 

    @Override 
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { 
     String date = dayOfMonth + "/" + (++monthOfYear) + "/" + year; 
     dateTextView.setText(date); 
    } 

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

     if(requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) 
     { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // If request is cancelled, the result arrays are empty. 

       permissionsAccepted = true; 

       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putBoolean("permission1", permissionsAccepted); 
       editor.commit(); 


       Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
       startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 

      } 

     } 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // check whether the result is ok 
     if (resultCode == RESULT_OK) { 
      // Check for the request code, we might be usign multiple startActivityForReslut 
      switch (requestCode) { 
       case RESULT_PICK_CONTACT: 

        mOrganizers = new Organizers(); 
        contactPicked(data); 
        mOrganizers.setFName(mOrganizerFirstName); 
        mOrganizers.setMobile(mOrganizerPhone); 
        mOrganizers.setEmail(mOrganizersEmail); 
        mOrganizers.setId(mOrganizersId); 
        mOrganizers.setLName(mOrganizersLastName); 

        mSelectedContacts.add(mOrganizers); 

        mAdapter.notifyDataSetChanged(); 

        if (mSelectedContacts.size() != 0) { 

         addOrganizer.setVisibility(View.INVISIBLE); 
         mContactsList.setVisibility(View.VISIBLE); 
         add.setVisibility(View.VISIBLE); 
        } else { 

         addOrganizer.setVisibility(View.VISIBLE); 

        } 
        break; 
      } 
     } else { 
      Log.e("MainActivity", "Failed to pick contact"); 
     } 
    } 

    private void contactPicked(Intent data) { 
     Cursor cursor = null; 
     try { 

      // getData() method will have the Content Uri of the selected contact 
      Uri uri = data.getData(); 
      //Query the content uri 
      cursor = getContentResolver().query(uri, null, null, null, null); 
      cursor.moveToFirst(); 
      // column index of the phone number 
      int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      // column index of the contact name 
      int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

      int contactIdIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); 

      mOrganizerPhone = cursor.getString(phoneIndex); 
      mOraganizerName = cursor.getString(nameIndex); 
      mOrganizersId = cursor.getString(contactIdIndex); 

      final String[] projection = new String[]{ContactsContract.CommonDataKinds.Email.DATA, // use 
        // Email.ADDRESS 
        // for API-Level 
        // 11+ 
        ContactsContract.CommonDataKinds.Email.TYPE}; 

      Cursor emailCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection, 
        ContactsContract.Data.CONTACT_ID + "=?", new String[]{String.valueOf(mOrganizersId)}, null); 

      if (emailCursor.moveToFirst()) { 
       final int contactEmailColumnIndex = emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); 

       while (!emailCursor.isAfterLast()) { 
        mOrganizersEmail = emailCursor.getString(contactEmailColumnIndex) + ";"; 
        emailCursor.moveToNext(); 
       } 
      } 

      String[] parts = mOraganizerName.split(" ", 2); 
      mOrganizerFirstName = parts[0]; // 004 
      mOrganizersLastName = parts[1]; 

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

    public void resetOrganizer(Context context) { 

     addOrganizer.setVisibility(View.VISIBLE); 
     mContactsList.setVisibility(View.GONE); 

    } 

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

    } 

    public void showAlert(String alert,PlanEventActivity activity) { 

     parent = (RelativeLayout)activity.findViewById(R.id.parentPanel); 

     Snackbar snackbar = Snackbar.make(parent, alert, Snackbar.LENGTH_LONG); 
     snackbar.show(); 

    } 

    } 

} 

Chose étrange le même code fonctionnait bien avant. Pour l'ancienne version. J'ai également essayé de copier la même activité de la version plus ancienne à la nouvelle version, mais toujours cela ne fonctionne pas.

Ne pas obtenir quoi de mal.

Quelqu'un peut-il vous aider s'il vous plaît? Merci ..

Répondre

0

Assurez-vous que vous n'avez pas android:noHistory=true attribut entré dans la déclaration d'activité dans AndroidMenifest.xml.

+0

oh oui .. mais je veux que cette activité ne garde aucun historique. @Keval Patel –

+0

Vous pouvez cal 'finish()' partout où vous quittez l'activité ou commencez une nouvelle activité (en utilisant 'startActivity()' ou 'startActivityForResult()'). Cela supprimera votre activité de la pile arrière. –

+0

merci beaucoup .. @eval Patel –

0

Remplacer requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);

avec ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);

+0

cela donne une erreur pour les paramètres. @Dima Rostopira –

+0

@ user3623979 a mis à jour la réponse –