6

के लिए भंडारण और गैलरी उपयोग के लिए अनुमति पढ़ें और लिखें, मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं जिसमें बाहरी संग्रहण को पढ़ने और लिखने के लिए अनुमति प्रदान करने की आवश्यकता है। मेरी आवश्यकता गैलरी से एक तस्वीर का चयन करना है और इसे मेरे ऐप में उपयोग करना है। Marshmallow उपकरणों को छोड़कर सबकुछ ठीक काम कर रहा है। मैं मार्शमलो के लिए अनुमति देना चाहता हूं। क्या कोई मुझे इस बारे में सहायता कर सकता है?marshmallow

+0

ओएस स्तर के अनुसार अनुमति नहीं बदलती है। यह नीचे जैसा ही है। <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.WRITE_EXTERNAL_STORAGE" /> <उपयोग-अनुमति एंड्रॉइड: name = "android.permission.READ_EXTERNAL_STORAGE" /> –

+0

मैंने पहले ही अपने मैनफैस्ट में यह अनुमति दी है .. लेकिन ऐप जब marshmallow उपयोगकर्ता गैलरी से छवि का चयन करता है तो दुर्घटनाग्रस्त हो जाती है .. – tiger

+0

की अनुमति देने की अनुमति इससे कोई फर्क नहीं पड़ता कि अनुमति अलग है। यह है कि आपको रनटाइम –

उत्तर

15

निम्नलिखित के रूप में यह कुछ प्राप्त किया जा सकता ...

public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{ 

    private static final int REQUEST_WRITE_PERMISSION = 786; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == REQUEST_WRITE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {    
     openFilePicker(); 
    } 
    } 

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

    private void requestPermission() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION); 
    } else { 
     openFilePicker(); 
    } 
    } 
} 
2

Runtime permissions - Android M और its reference project के माध्यम से पढ़ें।

अनुमति प्रवाह में बदलाव आया है, जिसे रनटाइम पर अनुमतियों की आवश्यकता होती है, अधिमानतः, जब आवश्यक हो। इसके साथ ही .. अनुमतियों को Normal and Dangerous में भी वर्गीकृत किया गया है जो अनुमति समूहों का भी नेतृत्व करेंगे।

0

इसके अतिरिक्त, यदि आप एकाधिक अनुमतियों के लिए पूछना चाहते हैं। तुम यह केर सकते हो।

private ArrayList<String> permisos; 

private void someMethod() 
{ 
     .. 

     verificarPermisos(Manifest.permission.READ_EXTERNAL_STORAGE); 
     verificarPermisos(Manifest.permission.ACCESS_FINE_LOCATION); 
     verificarPermisos(Manifest.permission.ACCESS_COARSE_LOCATION); 
     if (permisos.size()!=0) 
     { 
     solicitarPermisos(permisos.toArray(new String[permisos.size()])); 
     } 

     .. 

} 


@TargetApi(23) 
void verificarPermisos(String permiso){ 
    if (ContextCompat.checkSelfPermission(this,permiso) 
      != PackageManager.PERMISSION_GRANTED) { 
     permisos.add(permiso); 
     // Should we show an explanation? 
     if (shouldShowRequestPermissionRationale(permiso)) { 

     } 

    } 
} 

@TargetApi(23) 
void solicitarPermisos(String[] permiso){ 

    requestPermissions(permiso, 1); 

} 

पहले, मैं अगर अनुमति पहले ही दे दी या साथ नहीं "verificarPermisos()" विधि है की जाँच करें। अगर उन्हें प्रदान नहीं किया जाता है, तो मैं उन्हें "परमिट" सरणी सूची में जोड़ता हूं। अंत में, असंबद्ध अनुमतियों को स्ट्रिंग [] सरणी प्रारूप में पास करने के लिए उन्हें पुनः प्राप्त किया जाता है।

ध्यान दें कि आप केवल मैशमोलो (एपीआई 23) या उच्चतर के बाद से अनुमतियों का अनुरोध कर सकते हैं। इसलिए, यदि आपका ऐप मैशमोलो से पहले एंड्रॉइड संस्करणों को भी लक्षित कर रहा है तो आप "@TargetApi()" एनोटेशन का उपयोग कर सकते हैं और अनुमति विधियों को केवल तब कहा जा सकता है जब लक्ष्य API 23 या उच्चतर हो।
मदद करने के लिए आशा है, बधाई।

संबंधित मुद्दे