مدیریت دسترسی به نرم افزارها درAndroid Marshmallow 6

جمعه 27 فروردین 1395

در این مقاله می خواهیم در مورد مجوز دسترسی برنامه ها در اندروید Marshmallow 6 آخرین و جدید ترین ورژن اندروید صحبت نماییم.

مدیریت دسترسی به نرم افزارها درAndroid Marshmallow 6

قبل از خواندن این مقاله ابتدا در مورد ویژگی های اندروید Marshmallow مطالعه نمایید.

در آخرین کنفرانس ارائه شده google، اعلام کرده است نسخه ی جدید از آخرین نسخه ی جدید اندروید ویژگی های جدیدی اعلام کرده است که یکی از بزرگترین ویژگی های جدید مدیریت مجوز های ارائه شده به برنامه های کاربردی که از فروشگاه play store دانلود شده است را می خواهیم در این مقاله توضیح دهیم.

با استفاده از آخرین ورژن اندروید دیگر نیاز به اعتبار مجوز در طول نصب نیست اما زمانی که از این نرم افزار استفاده می نماییم کاربر می تواند این امکان را داشته باشد که مجوز در زمان استفاده از آن را داشته باشد.

شما می توانید مجوز برنامه های که بر روی گوشی خود دارید را توسط نرم افزار از منوی آن مشاهده نمایید نرم افزارهایی که بر روی گوشی خود آن را نصب دارید مدیریت مجوز آن برای شما نمایش داده می شود.

بسته به نرم افزار شما می توانید فعال یا غیر فعال کردن دسترسی به دوربین، مکان،میکروفون، اطلاعات تماس، پیامک، کارت حافظه و sd و... را دسترسی داشته باشید.

زمانی که شما مجوز استفاده از برنامه را غیر فعال می نمایید یعنی مجوز دسترسی به برنامه مورد نظر خود را غیر فعال کردید.

اولین قدم این است که شما مجوز دسترسی به نرم افزار خود را در فایل androidmanifest خودتون قرار بدهید به صورت زیر:

<uses-permission-sdk-m android:name="android.permission.READ_CONTACTS" />
<uses-permission-sdk-m android:name="android.permission.WRITE_CONTACTS" />

حالا یک متد دیگر باید بنویسید برای چک کردن مجوز دسترسی به قابلیت هایی که نیاز است مجوز دسترسی داشته باشید و می خواهید هر زمان از آن استفاده کنید.

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,

Manifest.permission.WRITE_CALENDAR);

contextcompact اجازه می دهد تا شما با استفاده از context از نسخه های اندروید خودتان استفاده نمایید.

متد shouldShowRequestPermissionRationale برای جلوگیری از چک شدن دوباره اعتبار از این متد استفاده می شود.

متد requestPermissions منتظر تایید درخواست مجوز کاربران استفاده می شود.

ایجاد کلاس PermissionUtil:

در این کلاس ما موارد و روش های مربوط به تایید مجوز را تعریف می نماییم.

در این کلاس از دو متد استفاده می شود:

متد اول چک کردن مجوز برنامه های مختلف که شما می خواهید اگر برنامه در حال حاضر موجود باشد و بتوانید به آن دسترسی داشته باشید و مجوز مورد تایید شود مقدار true را بر می گرداند و اگر مجوز مورد تایید قرار نگیرد و به آن دسترسی نداشته باشد مقدار false را  بر می گرداند.

متد دوم، متد RequestContactsPermissions است که مجوز دسترسی به اطلاعات کاربران را دارد که در مورد اطلاعات تماس کارمندان می توان دسترسی پیدا کرد.

کد کلاس به صورت زیر است:

public abstract class PermissionUtil {

   public static boolean verifyPermissions(int[] grantResults) {
       // At least one result must be checked.
       if(grantResults.length < 1){
           return false;
       }

       // Verify that each required permission has been granted, otherwise return false.
       for (int result : grantResults) {
           if (result != PackageManager.PERMISSION_GRANTED) {
               return false;
           }
       }
       return true;
   }

   public static boolean requestContactsPermissions(Activity activity) {

       boolean requestPermission;

       if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
               Manifest.permission.READ_CONTACTS)
               || ActivityCompat.shouldShowRequestPermissionRationale(activity,
               Manifest.permission.WRITE_CONTACTS)) {

           // Provide an additional rationale to the user if the permission was not granted
           // and the user would benefit from additional context for the use of the permission.
           // For example, if the request has been denied previously.

           requestPermission =  true;
       } else {
           // Contact permissions have not been granted yet. Request them directly.

           requestPermission =  true;
       }
       return requestPermission;
   }

}

سپس شما باید در mainActivity متغییر های مورد نظر را تعریف نمایید.

private static final int REQUEST_CONTACTS = 1;

private static String[] PERMISSIONS_CONTACT = {Manifest.permission.READ_CONTACTS,
       Manifest.permission.WRITE_CONTACTS};

در اینجا ما برای مشاهده ی اطلاعات تماس و دسترسی به اطلاعات تماس از PERMISSIONS_CONTACT

استفاده می نماییم.

زمانی که از appcompactactivity ارث بری کردیم و بعد باید onrequestpermissionresaultcallback را پیاده سازی کنیم.

پیاده سازی این متد بخش مهمی است، زمانی که مجوز دسترسی مخاطبان را درخواست می نماییم یک کد برای  درخواست به ما می دهد، ابتدا باید مجوز دسترسی را چک نماییم و نیاز به استفاده از روش تایید مجوز از کلاسی که تعریف کرده ایم.

اگر مجوز دسترسی به اطلاعات تماس داده شده باشد به شما پیغام می دهد که شما می توانید به اطلاعات تماس مخاطبان دسترسی پیدا نمایید و لی اگر مجوز داده نشده باشد یک پیغام بهتون داده می شود که شما نمی توانید به اطلاعات تماس مخاطبان دسترسی داشته باشید.

کد به صورت زیر است:

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

   if (requestCode == REQUEST_CONTACTS) {
       Log.i(TAG, "Received response for contact permissions request.");

       // We have requested multiple permissions for contacts, so all of them need to be
       // checked.
       if (PermissionUtil.verifyPermissions(grantResults)) {
           // All required permissions have been granted, display contacts fragment.
           Snackbar.make(mLayout, R.string.permision_available_contacts,
                   Snackbar.LENGTH_LONG)
                   .show();
       } else {
           Log.i(TAG, "Contacts permissions were NOT granted.");
           Snackbar.make(mLayout, R.string.permissions_not_granted,
                   Snackbar.LENGTH_LONG)
                   .show();
       }

   } else {
       super.onRequestPermissionsResult(requestCode, permissions, grantResults);
   }
}

زمانی که اجازه ی چک کردن به کاربر داده می شود می تواند به قسمت اطلاعات تماس دسترسی پیدا نماید.

در این مثال برای تایید کاربران استفاده از روش requestcontactpermission که از کلاس PermissionsUtil استفاده می شود

boolean requestPermission = PermissionUtil.requestContactsPermissions(this);

درخواست مجوز ها:

یک snackbar ظاهر می شود، که تایید مجوز را به ما نشان می دهد، که با فشار دادن این دکمه تابع requestpermission صدا زده می شود که یک پنجره ی درخواست کاربر نمایش داده می شود که یا رد می کند این پیام را یا به آن پاسخ می دهد.

در زیر متد requestcontactpermission را پیاده سازی می نماییم:

private void requestContactsPermissions() {

   boolean requestPermission = PermissionUtil.requestContactsPermissions(this);

   if (requestPermission == true){

       Log.i(TAG,
               "Displaying contacts permission rationale to provide additional context.");

       // Display a SnackBar with an explanation and a button to trigger the request.
       Snackbar.make(mLayout, R.string.permission_contacts_rationale,
               Snackbar.LENGTH_INDEFINITE)
               .setAction(R.string.ok, new View.OnClickListener() {
                   @Override
                   public void onClick(View view) {
                       ActivityCompat
                               .requestPermissions(MainActivity.this, PERMISSIONS_CONTACT,
                                       REQUEST_CONTACTS);
                   }
               })
               .show();

   }

   else {

       ActivityCompat.requestPermissions(this, PERMISSIONS_CONTACT, REQUEST_CONTACTS);

   }

}

چک کردن مجوز:

حالا آخرین متد، متدی است که ما نیاز داریم دسترسی مجوز به مخاطب ها را چک نماییم ما می توانیم از یک دکمه استفاده کنیم و با زدن دکمه متد مورد نظر را صدا بزنیم.

پیاده سازی متد Onclick:

@Override
public void onClick(View v) {
  
   switch (v.getId()) {
       case R.id.button_check_permissions:
           requestContactsPermissions();
           break;

       default:
           break;
   }

}

کد کامل کلاس MainActivity به صورت زیر است:

public class MainActivity extends AppCompatActivity implements
       OnRequestPermissionsResultCallback, OnClickListener{

   public static final String TAG = "PermissionActivity";

   private View mLayout;
   Button mButtonCheckPermission = null;

   private static final int REQUEST_CONTACTS = 1;
   private static String[] PERMISSIONS_CONTACT = {Manifest.permission.READ_CONTACTS,
           Manifest.permission.WRITE_CONTACTS};

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

       initView();
   }

   private void initView() {
       mButtonCheckPermission = (Button) findViewById(R.id.button_check_permissions);
       mButtonCheckPermission.setOnClickListener(this);

       mLayout = findViewById(R.id.sample_main_layout);

   }

   @Override
   public void onClick(View v) {
      
       switch (v.getId()) {
           case R.id.button_check_permissions:
               requestContactsPermissions();
               break;

           default:
               break;
       }

   }

   private void requestContactsPermissions() {

       boolean requestPermission = PermissionUtil.requestContactsPermissions(this);

       if (requestPermission == true){

           Log.i(TAG,
                   "Displaying contacts permission rationale to provide additional context.");

           // Display a SnackBar with an explanation and a button to trigger the request.
           Snackbar.make(mLayout, R.string.permission_contacts_rationale,
                   Snackbar.LENGTH_INDEFINITE)
                   .setAction(R.string.ok, new View.OnClickListener() {
                       @Override
                       public void onClick(View view) {
                           ActivityCompat
                                   .requestPermissions(MainActivity.this, PERMISSIONS_CONTACT,
                                           REQUEST_CONTACTS);
                       }
                   })
                   .show();

       }

       else {

           ActivityCompat.requestPermissions(this, PERMISSIONS_CONTACT, REQUEST_CONTACTS);

       }

   }

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

       if (requestCode == REQUEST_CONTACTS) {
           Log.i(TAG, "Received response for contact permissions request.");

           // We have requested multiple permissions for contacts, so all of them need to be
           // checked.
           if (PermissionUtil.verifyPermissions(grantResults)) {
               // All required permissions have been granted, display contacts fragment.
               Snackbar.make(mLayout, R.string.permision_available_contacts,
                       Snackbar.LENGTH_LONG)
                       .show();
           } else {
               Log.i(TAG, "Contacts permissions were NOT granted.");
               Snackbar.make(mLayout, R.string.permissions_not_granted,
                       Snackbar.LENGTH_LONG)
                       .show();
           }

       } else {
           super.onRequestPermissionsResult(requestCode, permissions, grantResults);
       }
   }
}

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید