6

पर पैकेज इन्स्टॉलर एक्टिविटी नहीं मिली है मेरे पास एक सुविधा लागू की गई है: प्रोग्राम को एपीके इंस्टॉल करें। कोड मैं उपयोग कर रहा हूं:एंड्रॉइड एम डेवलपर पूर्वावलोकन

ComponentName comp = new ComponentName("com.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity"); 
Intent newIntent = new Intent(callingIntent); 
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
newIntent.setComponent(comp); 

कॉलिंग इंन्टेंट में किसी अन्य सेवा से एक एपीके है।

एंड्रॉइड 6.0 (एमपीए 44 जी, नेक्सस 5) पर, यह इरादा दुर्घटनाग्रस्त हो रहा है। लॉगकैट:

08-20 14:58:56.127 26222 26222 E AndroidRuntime: Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity}; have you declared this activity in your AndroidManifest.xml? 

लॉलीपॉप-डिवाइस पर, उपरोक्त कोड ठीक काम कर रहा है।

क्या Google ने पैकेजइंस्टॉलर एक्टिविटी को पूरी तरह से हटा दिया है? क्या एंड्रॉइड 6.0 पर विशेष रूप से एक एपीके स्थापित करने के लिए कोई कामकाज है?

संदर्भ: Issue 3017: Unable to find explicit activity class com.android.packageinstaller.PackageInstallerActivity

उत्तर

2

मैं इस सवाल का जवाब मिल गया। Intent.ACTION_INSTALL_PACKAGE एक बेहतर विकल्प है। अपने अनुप्रयोग एक पैकेज इंस्टॉलर के रूप में पंजीकृत है, किसी चयनकर्ता संवाद बायपास करने के लिए नीचे दिए गए नमूना कोड का उपयोग करें:

File apkFile = new File(apkFileString); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); 
mContext.startActivity(intent); 
+2

मैं एंड्रॉयड एम के साथ नेक्सस 5 का उपयोग कर रहा है और अपने समाधान मुझे दे रहा है का उपयोग करते हुए: 'ActivityNotFoundException' – pkuszewski

2
:

intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); 
intent.setData(Uri.fromFile(file)); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

आप मानक पैकेज इंस्टॉलर का उपयोग करने के लिए, निम्नलिखित कोड का उपयोग करना चाहते हैं

जैसा कि आपने देखा कि पैकेज पथ गलत था और यह निर्दिष्ट नहीं करता कि यह दुर्घटना से छुटकारा पा जाएगा। अब हमारे पास

API <= 22 com.android.packageinstaller 

API >= 23 com.google.android.packageinstaller 

आप एडीबी के साथ किसी डिवाइस पर कोई सिस्टम ऐप पथ पा सकते हैं। नेक्सस 5 एक्स पर एक नया पैकेज इंस्टॉलर ढूंढने का एक उदाहरण इस तरह दिखता है।

$ adb shell 'pm list packages -f install' 

package:/data/app/android.autoinstalls.config.google.nexus-1/base.apk=android.autoinstalls.config.google.nexus 
package:/system/app/CertInstaller/CertInstaller.apk=com.android.certinstaller 
package:/system/priv-app/GooglePackageInstaller/GooglePackageInstaller.apk=com.google.android.packageinstaller 
+0

Nexus 5X Android संस्करण 6.0.1 (एपीआई 23) चल रहा है: com.google.android.packageinstaller। नेक्सस 5 चल रहा है एंड्रॉइड 6.0.1 (एपीआई 23): com.android.packageinstaller। एपीआई स्तर की जांच करना यह निर्धारित करने के लिए गारंटीकृत विधि नहीं है कि पैकेज का नाम –

+0

@ ब्रायन जॉनसन क्या आप वास्तव में सही हैं? आपने 2 अलग-अलग परिणामों के साथ 2 बराबर संस्करण पोस्ट किए हैं? क्या आप वाकई उनमें से एक पर पूर्वावलोकन संस्करण नहीं थे? क्या यह अभी भी वास्तविक है? – David

+0

@ डेविड वहां "गलत" पथ के साथ डिवाइस हैं। मैं दोनों में फॉलबैक जोड़ना चाहता हूं। दूसरे रास्ते से पुनः प्रयास कर रहे हैं। –

0

इसके अलावा Wigren जवाब @Adam रहे हैं:
एंड्रॉयड 6 में packge नाम बदल दिया गया था, लेकिन नहीं गतिविधि

ComponentName comp; 
if(android.os.Build.VERSION.SDK_INT < 23){ 
    comp = new ComponentName("com.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity"); 
}else{ 
    comp = new ComponentName("com.google.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity"); 
} 

Intent newIntent = new Intent(callingIntent); 
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
newIntent.setComponent(comp); 
0

आप कर सकते हैं android6.0 में सिर्फ खुला apk फ़ाइल। see demo code

0

बचने के लिए: ActivityNotFoundExceptionIntent.ACTION_INSTALL_PACKAGE

ComponentName comp; 
File apkFile = new File(apkFileString); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); 

if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1/*23*/){ 
comp = new ComponentName("com.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity"); 
}else{ 
comp = new ComponentName("com.google.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity"); 
} 

intent.setComponent(comp); 
startActivity(intent); 
संबंधित मुद्दे