 
Protects Resources & Data
What are Permissions?
- Android Protects Resources & Data with Permissions.
- Normally Used to :
- Limit Access to User Information (Eg: Contacts)
- Limit Access to Cost Sensitive APIs (Eg: SMS/MMS)
- Limit Access to System Resources (Eg: Camera )
- Permissions are represented as Strings.
- Declare in the Manifest.xml
Use of Permissions
App specify the permission in a special tag called “<uses-permission>” in Manifest File.
Eg:
<uses-permission android:name=“android.permission.READ_CONTACTS”>
</uses-permission>
Custom Permission ( Use)
That custom permission must be declared in any app that should launch.
<uses-permission 
android:name=“com.im.SPLASH_PERMISSION” >
</uses-permission>
More Permissions
- Component Permission
- Service Permission
- Broadcast Receiver Permission
- Content Provider Permission
Send SMS
- Check Runtime Permissions
if (ContextCompat.checkSelfPermission(this,Manifest.permission.SEND_SMS)
                != PackageManager.PERMISSION_GRANTED) {
  if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.SEND_SMS)) {
  } else {
     ActivityCompat.requestPermissions(this,
      new String[]{Manifest.permission.SEND_SMS}, 1);
  }
} else{
  sendSMS();
}
Handle if Granted
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 if(requestCode==1 && grantResults.length > 0
          && grantResults[0] == PackageManager.PERMISSION_GRANTED){
            sendSMS();
     }
}
Read Contacts
Open Contacts
Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactIntent, PICK_CONTACT);
Permission
<uses-permission android:name=”android.permission.READ_CONTACTS”/>
Read & Retrieve Contact Data
@Override
protected void onActivityResult(int reqCode, int resCode, Intent intent) {
if(reqCode == PICK_CONTACT && resCode == Activity.RESULT_OK){
Uri data = intent.getData();
Cursor c = getContentResolver().query(data, 
null, null, null, null);
if(c.moveToFirst()){
String name =c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String id = 
c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
         }
      }
}
Read & Retrieve Phone Numbers from Contact Data
Cursor numbers = 
getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +” = “+ id, null, null); 
if(numbers.moveToFirst()){
String mobile =
numbers.getString(numbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
etMobile.setText(mobile);
}
