बनाया BroadcastReceiver जो प्रदर्शित करता है किसी भी आवेदन की/स्थापना रद्द स्थापित पर आवेदन नाम और संस्करण संख्या। लेकिन मुझे intent.getData()
के माध्यम से पैकेज का नाम मिल रहा है। लेकिन जब मैं पैकेजमैनेजर का उपयोग करके उस एप्लिकेशन का नाम ढूंढने की कोशिश कर रहा हूं तो यह सभी मामलों में अपवाद फेंक रहा है इंस्टॉल/अनइंस्टॉल/प्रतिस्थापित। संभावित समस्या क्या हो सकती है और यह कैसे तय किया जा सकता है?ब्रॉडकास्ट रिसीवर बनाया गया जो किसी भी एप्लिकेशन को इंस्टॉल/अनइंस्टॉल करने पर एप्लिकेशन का नाम और संस्करण संख्या प्रदर्शित करता है?
कोड:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.widget.Toast;
public class ApplicationStatusNotification extends BroadcastReceiver {
/**
* This method receives message for any application status(Install/ Uninstall) and display details.
*/
@Override
public void onReceive(Context context, Intent intent) {
// Get application status(Install/ Uninstall)
boolean applicationStatus = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
String toastMessage = null;
// Check if the application is install or uninstall and display the message accordingly
if(intent.getAction().equals("android.intent.action.PACKAGE_INSTALL")){
// Application Install
toastMessage = "PACKAGE_INSTALL: "+ intent.getData().toString() + getApplicationName(context, intent.getData().toString(), PackageManager.GET_UNINSTALLED_PACKAGES);
}else if(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")){
// Application Uninstall
toastMessage = "PACKAGE_REMOVED: "+ intent.getData().toString() + getApplicationName(context, intent.getData().toString(), PackageManager.GET_UNINSTALLED_PACKAGES);
}else if(intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")){
// Application Replaced
toastMessage = "PACKAGE_REPLACED: "+ intent.getData().toString() + getApplicationName(context, intent.getData().toString(), PackageManager.GET_UNINSTALLED_PACKAGES);
}
//Display Toast Message
if(toastMessage != null){
Toast.makeText(context, toastMessage, Toast.LENGTH_LONG).show();
}
}
/**
* This method get application name name from application package name
*/
private String getApplicationName(Context context, String data, int flag) {
final PackageManager pckManager = context.getPackageManager();
ApplicationInfo applicationInformation;
try {
applicationInformation = pckManager.getApplicationInfo(data, flag);
} catch (PackageManager.NameNotFoundException e) {
applicationInformation = null;
}
final String applicationName = (String) (applicationInformation != null ? pckManager.getApplicationLabel(applicationInformation) : "(unknown)");
return applicationName;
}
}
एक बात आप सबसे अधिक संभावना को बदलने के लिए, बजाय Intent.ACTION_PACKAGE_INSTALL के लिए सुनने की, तो आप शायद Intent.ACTION_PACKAGE_ADDED लिए देख रहे हैं चाहता था नहीं है। दस्तावेज़ीकरण के आधार पर पहले किसी का कभी भी उपयोग नहीं किया जाना चाहिए था और यदि आपको ऐसी कार्रवाई मिली है तो यह आश्चर्यजनक है। – harism
हाँ, लेकिन अभी भी pckManager.getApplicationInfo (PackageName, झंडा) फेंक है NameNotFoundException अपवाद। –
क्या आप ऑनसेसिव विधि Log.d ("MyApp", "इरादा प्राप्त करें:" + मंशा) में जोड़ सकते हैं; और logcat संदेश जोड़ें? – Yury