2015-06-01 5 views
18

मेरा ऐप उपयोगकर्ताओं को अन्य ऐप्स से अपनी फोटो और वीडियो आयात करने की अनुमति देता है। अब जब Google ने Google+ फ़ोटो को Google फ़ोटो के साथ बदल दिया है, तो कुछ चीजें मेरे लिए टूट गईं। ऐप पुनरारंभ करने के बाद इन चीजों में से एक आयातित फ़ाइलों का पुन: उपयोग कर रहा है। मुझे एहसास है कि उन्होंने छवियों को यूआरआई के साथ इरादा वापस करने पर दी गई अनुमतियों को कड़ा कर दिया है, इसलिए मेरे ऐप को मारने के बाद अब अपलोड की गई फ़ाइल तक पहुंचने की अनुमति नहीं है। मैं सुरक्षा expection हो रही है:संदर्भ प्रदाताओं से डेटा का उपयोग या Google फ़ोटो का अनुरोध करने की अनुमति पढ़ने की अनुमति?

java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.contentprovider.MediaContentProvider from ProcessRecord{2c17ab9e 2124:com.myapp.myapp/u0a436} (pid=2124, uid=10436) that is not exported from uid 10427 

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

मैं भी com.google.android.apps.docs.sync.filemanager.FileProvider

कोई सुझाव/वैकल्पिक हल द्वारा प्रदान की फ़ाइलें पुन: उपयोग के साथ एक ही समस्या हो रही है? मुझे पता है कि मैं अनुमति खोने से पहले फ़ाइल को पढ़ सकता हूं इसलिए सिद्धांत में मैं इसे कॉपी कर सकता हूं लेकिन मैं नहीं कह सकता कि मुझे यह बहुत पसंद है ..

उत्तर

17

हाँ पर अस्थायी फ़ाइल पथ का उपयोग करने की सलाह देते हैं, इस Android Developer site पर वर्णित है, डिजाइन कर रहा है।

सुरक्षा कारणों से, अनुमतियां अस्थायी हैं, इसलिए क्लाइंट ऐप का कार्य ढेर समाप्त होने के बाद, फ़ाइल अब पहुंच योग्य नहीं है। ऑनएक्टिविटी रीसेट विधि में, जब आप इरादा उत्तर प्राप्त करते हैं तो आपको फ़ाइल डेटा प्राप्त करना होगा। फ़ाइल डेटा की एक प्रति स्टोर करें, क्योंकि जब एक्टिविटी रिसेट रिटर्न पर फ़ाइल अब उपलब्ध नहीं होगी।

+0

यह मेरा निष्कर्ष भी था इसलिए मैं उत्तर के रूप में आपका उत्तर चुनूंगा। धन्यवाद – vkislicins

+0

यह एंटीपाटरन की तरह दिखता है। मुख्य धागे में फ़ाइल की एक प्रति बनाओ? – tse

+0

@tse आपके पास किसी भी धागे से पहुंच है जब तक कि आपकी गतिविधि को इरादे से लक्षित नहीं किया गया है –

2

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

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
+0

कुछ भी करने को नहीं लगता है .. – vkislicins

+0

आप फ़ाइल तक पहुँचने का InputStream उपयोग कर सकते हैं? जैसे "context.getContentResolver()। openInputStream (uri);" ? – Zephyr

+0

यह वही है जो मैं अनुमति त्रुटि प्राप्त करते समय कर रहा हूं – vkislicins

0

लगता this सवाल की तरह simular

मुझे लगता है कि जब गतिविधि (नहीं टुकड़ा) की मृत्यु हो जाती है - सभी यह द्वारा प्राप्त यूआरआई अवैध बन

मैं भी यही समस्या है - में चित्र अपलोड करने की कोशिश पृष्ठभूमि। लेकिन यूआई धागा में उपयोगकर्ता गतिविधि को बदल सकते हैं और URI इस के साथ अवैध इसी अंक

+0

हां यह समान दिखता है, लेकिन मुझे लगता है कि नई फ़ोटो ऐप सामग्री प्रदाता के लिए अनुमति बदल दी गई है क्योंकि मुझे लगता है कि मैंने भाग्य से पहले अनुमति की कोशिश की थी। मैंने फ़ाइलों को अपने क्षेत्र में कॉपी करने और पहुंच को बनाए रखने के लिए अपने सामग्री प्रदाता में पंजीकरण करना समाप्त कर दिया। अगर आपको बेहतर समाधान मिल जाए तो मुझे बताएं! – vkislicins

0

मेरे पास हो जाता है, और आप और तरीकों के आसपास काम का पालन करने की कोशिश:

  1. Android 5.1.1 lollipop return null file path if image chosen from gallery

  2. https://gist.github.com/alexzaitsev/75c9b36dfcffd545c676

  3. Choosing photo using new Google Photos app is broken

+0

मेरी समस्या प्रारंभिक कॉल कॉल नहीं है - यह अनुमति प्रतिधारण है। फ़ाइल तक पहुंच प्राप्त करने के बाद, ऐप निलंबित होने पर उपयोगकर्ता को निरस्त कर दिया जाता है या उपयोगकर्ता एप – vkislicins

+0

से दूर चला जाता है, कृपया लिंक के बजाय यहां जवाब शामिल करें। Http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links- कहीं और-really-good-answers –

7
  1. जब आप "Google फ़ोटो" ऐप का उपयोग करते हैं तो आप इस सुरक्षा अपवाद लॉग को पुन: पेश कर सकते हैं।

  2. इस समस्या का मुख्य कारण "Google फोटो" सामग्री सामग्री को "सामग्री: //com.google.android.apps.photos.contentprovider/1/1" जैसे निश्चित स्ट्रिंग के साथ साझा करता है और इसे स्थिर अस्थायी मानों से कनेक्ट करता है । "Google फ़ोटो" फ़ाइल पथ प्रदान नहीं करता है जब वास्तविक गतिविधि या संदर्भ जो Intent.ACTION_SEND प्राप्त करता है। शायद, यह "Google फोटो" की नीति है, न कि निजी छवि फ़ाइल को अन्य ऐप पर बेनकाब न करें।

  3. उदाहरण के लिए, आप Intifest.ACTION_SEND प्राप्त करने के लिए मैनिफेस्ट फ़ाइल, एक्टिविटी ए और एक्टिविटी बी एक्टिविटी ए में 2 गतिविधि को परिभाषित करते हैं। छवि फ़ाइल को संसाधित करने के लिए गतिविधि बी। गतिविधि गतिविधि बी के इरादे को आगे बढ़ाएं। फिर गतिविधि बी "Google फ़ोटो" के लिए सही गतिविधि नहीं है, तो आप सुरक्षा अपवाद का सामना करते हैं।

तो, मैं आप गतिविधि एक पर अस्थायी रूप से फ़ाइल को सहेजने और गतिविधि बी

+0

धन्यवाद! मुझे लगता है कि आपका उत्तर मेरे मुद्दे का अधिकार है। –

+1

मुझे एक ही समस्या है, Google फ़ोटो समस्या का एक बड़ा कारण बनती है: -/ –

1

आपको अपने इरादे से मेल खाने वाले सभी पैकेजों के लिए स्पष्ट रूप से अनुमतियां सेट करने की आवश्यकता है। यह आमतौर पर एंड्रॉइड 4.4 में होता है।

आपको लगता है कि ऐसा करने के लिए इस सुविधा का उपयोग कर सकते हैं:

List<ResolveInfo> resInfoList = getContext().getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
     for (ResolveInfo resolveInfo : resInfoList) { 
      String packageName = resolveInfo.activityInfo.packageName; 
      getContext().grantUriPermission(packageName, imageFileUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     } 
संबंधित मुद्दे