2016-01-01 3 views
0

я разрабатывал приложение, которое считывает файлы Excel образуют внешнее хранилище проблемы я столкнулся было разрешения быть добавлен в очевидномGeneric Осуществления запрашивающей разрешения -MarshMallow-Android

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

я добавил разрешение в манифесте, но проблема осталась прежней. Я много искал, но все ответили, что добавили разрешение в ваш манифест.

затем на портале разработчика android я узнал, что для MarshMallow вы получите прагматическое разрешение в этой деятельности, подобной этой

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
     Manifest.permission.READ_CONTACTS)) { 

    // Show an expanation to the user *asynchronously* -- don't block 
    // this thread waiting for the user's response! After the user 
    // sees the explanation, try again to request the permission. 

} else { 

    // No explanation needed, we can request the permission. 

    ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.READ_CONTACTS}, 
      MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
    // app-defined int constant. The callback method gets the 
    // result of the request. 
    } 
} 

, а затем в результате

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
     switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
     // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      // permission was granted, yay! Do the 
      // contacts-related task you need to do. 

     } else { 

      // permission denied, boo! Disable the 
      // functionality that depends on this permission. 
     } 
     return; 
    } 

    // other 'case' lines to check for other 
    // permissions this app might request 
    } 
} 

я хочу общий метод, который будет использоваться для таких разрешений в Заявке я просто должен пройти метод и разрешения я хочу Я не хотите включить этот код в любой деятельности, где я хочу никакого разрешения

ответ

1

Существует много способов, чтобы реорганизовать это ....

вы можете просто создать базовый класс и использовать наследование, чтобы дать каждому виду эту функцию.

(Когда поддерживается java8 (моя догадка - это Android-версия 2.0 после следующего google-ввода-вывода, но все же просто предположение), вы можете определить интерфейс с этими двумя методами по умолчанию, а затем реализовать их в любом классе, который вам нужен.)

Вы могли бы извлечь ядро ​​этих двух наборов кода и сделать их статическими методами, которые вы только вызываете из onCreate/onRequestPermissionsResult.

(лично я бы предложил метод интерфейса, но это пока не сработает ... к сожалению ...) Поэтому я бы сказал, что извлечение логики и просто включение их в класс-помощник может быть самым чистым способом сделай это. (Одна Наследование может вызвать проблемы вниз линии из-за отсутствия для множественного наследования)


@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    Common.onRequestPermissionsResult(this, requestCode, permissions, grantResults); 
} 

// this is inside Common.java same package 

public static class Common { 
    public static void onRequestPermissionResults(Context context, int requestCode, String permissions[], int[] grantResults{ 
     switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
     // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      // permission was granted, yay! Do the 
      // contacts-related task you need to do. 

     } else { 

      // permission denied, boo! Disable the 
      // functionality that depends on this permission. 
     } 
     return; 
    } 

    // other 'case' lines to check for other 
    // permissions this app might request 
    } 
    } 
} 

Вот «в основном», как бы вы вытаскивать логику в другой класс. Тем не менее, вам, возможно, придется определить интерфейс, который ваша деятельность должна реализовать для этого, чтобы работать, а затем вместо передачи в «Контекст» вы передаете экземпляр этого интерфейса ... Который позволит вам вернуть управление активации о том, какой пользовательский код записывать «внутри» метода (ов) общего класса (по крайней мере логически). (Многое из этого - «вам, возможно, придется», потому что без вашего кода это трудно понять.)

+0

Вы можете представить пример кода, который я хочу сделать статической функцией, как это было бы? –

+0

- часть примера – mawalker

Смежные вопросы