是否有一种简单的方法来确定具有活动的给定完整类名的应用程序的包名称。
例如,假设某个应用(不是我的应用)具有此类com.example.test.ui.MyActivity
并且还假设该应用程序的包名称为com.example.test
所以我的问题是,有没有办法获得该应用程序的包名称而不尝试所有可能性。
这是我到目前为止,有一种更简单的方法。
public static String findPackageForActivity(Context context, String activity)
{
/*com.google.android.apps.messaging.ui.ConversationListActivity*/
String[] parts = activity.split("\\.");
if(TextUtils.isEmpty(activity) || parts.length < 2)return null;
int splitIndex = parts.length - 1;
for(int i = splitIndex; i > 1; --i)
{
activity = activity.substring(0, activity.lastIndexOf("."));
if(isApplicationInstalled(context, activity))return activity;
}
return null;
}
public static boolean isApplicationInstalled(Context context, String packageName)
{
PackageManager pm = context.getPackageManager();
try
{
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
}
catch (PackageManager.NameNotFoundException e)
{
return false;
}
}