2015-07-15 11 views
13

मैं पूर्वावलोकन एम के साथ खेलता हूं और उस पर अपने ऐप का परीक्षण करता हूं, खासकर "बाहरी संग्रहण में फ़ाइल को सहेजना" भाग। डाउनलोड/प्रक्रिया शुरू होने से बचाने के लिए करने से पहले, मैं डेवलपर पृष्ठ पर वर्णित के रूप मेंएंड्रॉइड पूर्वावलोकन एम: अनुमति अनुदान के बाद गतिविधि पुन: प्रयास

Manifest.permission.WRITE_EXTERNAL_STORAGE 

अनुमति के लिए अनुरोध करते हैं:

"Allow <AppName> to access photos, media, and files on your device?" Deny/Allow 

तो मैं हिट ": https://developer.android.com/preview/features/runtime-permissions.html

संवाद की उम्मीद के रूप में होता इनकार करें "-बटन, गतिविधि की onRequestPermissionsResult-method कहा जाता है।

तो मैं "अनुमति दें" बटन दबाते हैं, तो गतिविधि पहले से निर्मित है और बाद में onRequestPermissionsResult-विधि कहा जाता है। मुझे लगता है कि यह अनुमत अनुमति का परिणाम है।

लेकिन दूसरी स्थिति मुश्किल है क्योंकि मैं एक कॉलबैक कि डाउनलोड शुरू होता है ट्रिगर करना चाहते हैं, लेकिन इस वस्तु इस बिंदु पर शून्य है:

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

    getLogger().error("onRequestPermissionsResult (" + requestCode + ", " + permissions + ", " + grantResults + ")"); 
    switch (requestCode) { 


     //permission for saving files? 
     case PermissionCode.WRITE_EXTERNAL_STORAGE: { 


      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       //HERE IS THE NULL-OBJECT 
       if (controller != null) { 

        controller.triggerCallback(); 
       } 
      } 
      break; 
     } 
     default: { 

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

तो मेरी प्रश्न हैं:

  1. कर सकते हैं मैं इस मनोरंजन से बचता हूँ?
  2. नहीं हैं, तो मैं अपने कोड कैसे नया स्वरूप कर सकते हैं समस्या को हल करने के लिए - मैं इस समय पूरी तरह से idealess हूँ

संपादित करें 1:

मैं एक हैंडलर के साथ समस्या को हल करने की कोशिश की और पोस्ट किया गया - लेकिन मैंने इसे छोड़ दिया।

संपादित करें 2:

मैं प्रारंभिक इसे हल और फिर से अनुरोध डाउनलोड बटन पुश करने के लिए (अनुमति के मामले में) के साथ उपयोगकर्ता के लिए एक टोस्ट दिखा। लेकिन Google: क्या आप गंभीर हैं?

संपादित करें 3:

कोई मनोरंजन नवीनतम SDK 6.0 (संस्करण 23) के साथ होता है - हो सकता है किसी को माउंटेन व्यू में मेरी रो सुना :-)

+0

अरे आप इसे कैसे अंततः sove किया? मैं संस्करण 23 के साथ भी संकलित कर रहा हूं, और मुझे अभी भी अनुमति देने और अस्वीकार करने पर गतिविधि पुनरारंभ का सामना करना पड़ रहा है। OnRequestPermissionsResult विधि कभी नहीं कहा जाता है। मैं एक टुकड़े से अनुरोध पैरामिशन() बुला रहा हूँ। क्या इससे कोई फर्क पड़ता है? –

+0

@ मयूर अधिक: आप अनुमति को निरस्त/अनुदान कैसे देते हैं? ऐप सेटिंग्स के अंदर रद्द/अनुदान करते समय, मेरे पास अभी भी ऐप को फिर से शुरू करने के बाद मनोरंजन है। लेकिन ऐप वर्कफ़्लो के अंदर - जैसा कि ऊपर वर्णित है - कोई मनोरंजन नहीं होता है ... –

+0

कभी नहीं, मुझे यह हल हो गया। –

उत्तर

1

तुम हमेशा के तुरंत बाद डाउनलोड की स्थिति की जांच कर सकते हैं गतिविधि onCreate() में ही पुन:

static final int MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0; 
boolean initiateDownload = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(savedInstanceState != null) { 
     initiateDownload = savedInstanceState.getBoolean("toDownload"); 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    final boolean hasPermission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      == PackageManager.PERMISSION_GRANTED; 
    if(initiateDownload && hasPermission) { 
     // start download here... 
    } else { 
     requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE}, 
       MainActivity.MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if(requestCode == MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) { 
     if(grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      initiateDownload = true; 
     } else { 
      // denied permission... 
     } 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBoolean("toDownload", initiateDownload); 
} 
+0

thx, लेकिन मेरा संपादन देखें! –

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