استفاده از روش های قدیمی کار با Intent بجای FileProvider در اندروید +۸


استفاده از روش های قدیمی کار با Intent بجای FileProvider در اندروید +۸
۲۹ خرداد ۱۳۹۸
3503 بازدید
نویسنده:

💡 با توجه به موارد امنیتی ای که گوگل هر لحظه برای اندروید لحاظ میکنه ماهم باید موقع استفاده از موارد و کدهای قدیمی حواسمون به این مورد باشه که آیا این کدها در اندرویدهای بالاتر همچنان کار میکنند یانه؟ یکی از اون موارد بحث FileProvider هست که در ادامه بیشتر باهاش آشنا میشیم.

 

🔸 تقریباً همه‌ی ما با کد های اشتراک گذاری فایل، عکس، و… ، کد درخواست نصب یک برنامه، اینتنت تغییر پس زمینه گوشی و کدهای این چنینی آشنایی داریم و کم و بیش استفاده میکنیم.

 

❗️ اما آیا میدونستید اگر فیلد TargetSDK در منیفست رو روی ۲۶ به بالا بذارید موقع استفاده از اینطور کد ها در اندروید ۸ به بالا با خطا مواجه میشید؟

 


‼️ نمونه ای از این خطا:

android.os.FileUriExposedException: file:///… exposed beyond app through ClipData.Item.getUri()

at android.os.StrictMode.

onFileUriExposed(StrictMode.java:1958)


 

 

❎ چرا با این خطا مواجه میشیم و راه حلش چیه؟!

 

استفاده از کدهایی که در بالا مثال زدیم و کدهای اینتنت های مشابه ی اون، در اندروید ۸ به بالا کمی تغییر داشته و گوگل اعلام کرده بدلایل رعایت بحث های امنیتی در اندروید باید ازاین نسخه به بعد تغییراتی در کد های خودتون بدید که کاملاً در این لینک شرح استفاده ی اون در جاوا و در این لینک نحوه استفادش برای بیسیک۴اندروید توضیح داده شده. (بزودی آموزش فارسی این لینک ها توسط کافه توسعه آماده میشه)

 

 

✅ آیا غیر از این، راه ساده تری وجود داره؟

 

بله، شما براحتی میتونید به اندروید اعلام کنید که مواردی که انجام دادید و توصیه کردید رو من برای اپلیکیشن هام نمی‌خوام رعایت کنم و قصد دارم همچنان از کدهای قدیمی استفاده کنم و به خطاهای بالا هم برنخورم!

 

❇️ برای اینکار کافیه کد زیر رو در سرویس Starter یا یکی از اکتیویتی هاتون که اولین بار اجرا میشه قرار بدید(هدف اینه که فقط این کد یکبار اجرا بشه و مهم نیست کجا قرار میدین)

 

#if java
import android.os.StrictMode;
public void _onCreate() { //@cafetoseeh
if (android.os.Build.VERSION.SDK_INT >= 18) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
//cafetoseeh.ir
builder.detectFileUriExposure();
}}
#End If

 

برای استفاده ازاین کد در جاوا هم کافیه خط ۴ الی ۹ رو در خط اول متد Oncreate اکتیویتی MainActivity تون قرار بدید.

 

 


✏️ منبع: کافه توسعه


 


آموزش برنامه نویسی اندروید

پژمان نیکروان
پژمان نیکروان

پژمان نیکروان هستم؛ مدیر وب سایت کافه توسعه، شروع فعالیتم به برنامه نویسی از سال 1392 بوده و هدف از ایجاد وبسایت اشتراک گذاری تجارب خودم و دیگر برنامه نویسان هست.

ارسال دیدگاه

می توانید از تگ های HTML نیز استفاده کنید :
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

دیدگاه های مطلب:
Profile Comment
Thunder

واقعا ممنون

نمیدونم دقیقا گوگل چه مشکلی داره که به جای اینکه بیاد درست کنه واقعا گند میزنه به همه چی
آخه آپدیت میدی چرا کدهای قدیمی رو میریزی بهم

پاسخ دادن

14 مرداد 1398