2013-03-05 4 views
5

तक पहुंचने पर सुरक्षा अपवाद से बचें मेरे पास एक ऐसी गतिविधि है जिसमें चित्र माइम प्रकारों के साथ इरादा फ़िल्टर android.intent.action.SEND है।DownloadProvider

एक बार जब उपयोगकर्ता शेयरों चित्र (विशेष रूप से डाउनलोड प्रबंधक से) मेरी गतिविधि (UploadActivity) के साथ, गतिविधि यदि उपयोगकर्ता के प्रवेश की जाँच करेगा। यदि नहीं, तो यह (EXTRA_STREAM के साथ) मूल उद्देश्य स्टोर करेगा और उपयोगकर्ता को लॉगिन एक्टिविटी में भेज दें। एक बार जब उपयोगकर्ता लॉग इन हो जाता है, तो उसे मूल सहेजे गए इरादे से अपलोडएक्टिविटी पर वापस लाया जाएगा।

अब, मूल मंशा को बहाल करने के बाद भी, मुझे java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri... मिलता है।

मुझे समझ में आता है कि मुझे यह क्यों मिलता है। ऐसा इसलिए है क्योंकि मेरे पास मूल मंशा की अस्थायी अनुमति नहीं है।

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

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.UploadActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri content://downloads/all_downloads/1145 from pid=16585, uid=10086 requires android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission() 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
    at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5041) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri content://downloads/all_downloads/1145 from pid=16585, uid=10086 requires android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission() 
    at android.os.Parcel.readException(Parcel.java:1425) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 
    at android.content.ContentResolver.query(ContentResolver.java:372) 
    at android.content.ContentResolver.query(ContentResolver.java:315) 
    at com.example.UploadActivity.getFileFromContentUri(UploadActivity.java:304) 
    at com.example.UploadActivity.onCreate(UploadActivity.java:195) 
    at android.app.Activity.performCreate(Activity.java:5104) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
    ... 11 more 
+0

कृपया सभी लॉगकैट त्रुटियों को पोस्ट करें। निश्चित होने के लिए, क्या आपके पास 'इंटरनेट' अनुमति है? – Sam

+0

मूल पोस्ट को अद्यतन किया गया है। हां मेरे पास 'इंटरनेट' अनुमति है। यह मेरी एकमात्र अनुमति है। – ademers

+0

@AWebDevDuh: आपने 'android.permission.ACCESS_ALL_DOWNLOADS' अनुमति भी जोड़ा है? –

उत्तर

0

पोस्ट करें ContentProvider क्वेरी करने के लिए अपना पूरा कोड। मेरा मुद्दा भी ऐसा ही था। जब साथ एक कर्सर बुला:

c=MyApplication.getAppContext().getContentResolver().query(uri,null,null,null,null); 

लेकिन जब मैं

String[] proj=new String[] { 
       MediaStore.MediaColumns.DATA, 
       MediaStore.MediaColumns.DISPLAY_NAME, 
     }; 
c=MyApplication.getAppContext().getContentResolver().query(uri,proj,null,null,null); 

यह काम करता है के लिए प्रक्षेपण निर्धारित किया है। जैसे ही मैं प्रक्षेपण के लिए MediaStore.MediaColumns.MIME_TYPE जोड़ता हूं, यह फिर से विफल हो जाता है। ऐसा लगता है कि प्रदाता इस (और शायद कुछ अन्य) कॉलम तक पहुंच प्रदान नहीं करता है।

+0

कुछ समय के लिए परीक्षण करने के बाद मैं इंप्रेशन के तहत हूं यह केवल पहला कदम है। MediaStore.MediaColumns.MIME_TYPE माइम टाइप के साथ मैं लगातार अपवाद प्राप्त करता हूं, लेकिन इसके बिना मुझे समय-समय पर सुरक्षा अपवाद भी मिलते हैं। शायद कुछ समय बाद अनुमति रद्द कर दी गई है? अब मैं डीबग मोड में बैठता हूं, अगली क्वेरी पर एक अपवाद अधिक संभावना है। मेरे लिए एक "ACTION_SEND" सेमी से काम करने के लिए एक उरी को घुमाने के लिए, लेकिन "ACTION_SEND_MULTIPLE" से कई यूरिस पूछताछ करने से समय-समय पर कुछ परेशानी होती है। –

+0

मैंने एक ही ठोकरें ब्लॉक को मारा - कभी-कभी मैं सामग्री स्ट्रीम तक पहुंच सकता हूं, दूसरी बार मुझे सुरक्षा अपवाद, समान फ़ाइल आदि मिलती है। क्या आपको इस मुद्दे के बारे में अधिक जानकारी मिली? – gregko