0

Ich möchte Laufzeitberechtigungen aufrufen, um Kontakte beim Klicken auf eine Ansicht zu lesen. Also überprüfe ich, ob die App die Berechtigungen hat und ob nicht nach den Berechtigungen gefragt wird. Wenn das Anforderungsdialogfeld angezeigt wird, wird die Aktivität jedoch schwarz und wird beendet, wenn im Dialog auf Zulassen oder Verweigern geklickt wird. Wenn ich die App debugge, wird nach dem Klicken auf "Zulassen" oder "Ablehnen" nicht die onRequestPermissionsResult-Methode aufgerufen.Aktivität wird schwarz, während die Laufzeitberechtigungen aufgerufen werden

Auch ich rufe den Kontakt Intent, wenn Berechtigungen akzeptiert werden. Ich möchte diese in der gleichen Aktivität wie eine Liste ausgewählter Kontakte anzeigen. Dafür habe ich eine Liste und fügte Kontakte zur Liste onActivitResult Methode hinzu.

Aber auch wenn ich einen Kontakt aus Kontakten auswähle, wird die Aktivität beendet. Es wird nicht zur onActivityResult-Methode weitergeleitet.

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(); 

    } 

    } 

} 

Seltsames Ding der gleiche Code war gut vor. Für die ältere Version. Ich habe auch versucht, die gleiche Aktivität der älteren Version auf die neue Version zu kopieren, aber es funktioniert immer noch nicht.

Nicht bekommen, was falsch ist.

Kann mir bitte jemand helfen? Danke ..

Antwort

0

Stellen Sie sicher, Sie haben nicht android:noHistory=true Attribut in der Aktivität Erklärung eingetragen in AndroidMenifest.xml.

+0

oh ja .. aber ich möchte diese Aktivität nicht, um irgendwelche Geschichte zu halten. @Keval Patel –

+0

Sie können cal 'finish()' angeben, wo immer Sie die Aktivität verlassen oder eine neue Aktivität starten (mit 'startActivity()' oder 'startActivityForResult()'). Das wird deine Aktivität vom Backstack entfernen. –

+0

vielen Dank .. @Keval Patel –

0

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

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

+0

Dies gibt einen Fehler für die Parameter. @Dima Rostopira –

+0

@ user3623979 aktualisierte Antwort –