में प्रोग्रामेटिक रूप से एक एपीके स्थापित करें मैं अपने एप को स्वचालित रूप से एपीके इंस्टॉल करने की कोशिश कर रहा हूं। यह एपीआई < 24 के लिए ठीक काम करता है। लेकिन 24 के लिए, यह असफल रहा है। एंड्रॉयड अतिरिक्त सुरक्षा लागू किया गया है: अपने एप्लिकेशन के बाहर // यूआरआई:एंड्रॉइड 7/api24
एंड्रॉयड 7.0 को लक्षित ऐप के लिए, एंड्रॉयड ढांचे StrictMode एपीआई नीति है कि फ़ाइल उजागर की अनुमति नहीं देतीं लागू करता है। यदि फ़ाइल यूआरआई युक्त कोई इरादा आपके ऐप को छोड़ देता है, तो ऐप FileUriExposedException अपवाद के साथ विफल रहता है।
तो मैं इस कोशिश की:
Uri myuri;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
myuri = Uri.parse("file://"+outapk);
} else {
File o = new File(outapk);
myuri = FileProvider.getUriForFile(con, con.getApplicationContext().getPackageName() + ".provider", o);
}
Intent promptInstall = new Intent(Intent.ACTION_VIEW).setDataAndType(myuri,"application/vnd.android.package-archive");
con.startActivity(promptInstall);
लेकिन एक घातक अपवाद प्राप्त करें:
com.android.packageinstaller "Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{b42ee8a 6826:com.android.packageinstaller/u0a15} (pid=6826, uid=10015) that is not exported from uid 10066".
मैं निर्यात मेरी प्रकट में = सच है।
समस्या यह प्रतीत होती है कि पैकेज इंस्टॉलर सामग्री का उपयोग नहीं कर सकता: // uri।
क्या ऐप को एपीआई 24 के साथ एपीके स्थापित करने की अनुमति देने के कोई तरीके हैं?
बहुत बढ़िया। उसने ऐसा किया धन्यवाद! – elsie
ऐडफ्लैग (Intent.FLAG_GRANT_READ_URI_PERMISSION) ने भी मेरे लिए काम किया। –
हे कॉमन्सवेयर। अगर हम एन और निचले एपिस के लिए ... और अधिक उपयोग करना है? ऐसा करने का कोई और तरीका नहीं है? – David