package net.exclaimindustries.tools; import java.util.List; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.ConnectivityManager; import android.net.NetworkInfo; /** * AndroidUtil features some helpful convenience methods for Android. * * @author Jonas Graudums, Nicholas Killewald */ public class AndroidUtil { /** * Indicates whether the specified action can be used as an intent. This * method queries the package manager for installed packages that can * respond to an intent with the specified action. If no suitable package is * found, this method returns false. * * @param context The application's environment. * @param action The Intent action to check for availability. * * @return True if an Intent with the specified action can be sent and * responded to, false otherwise. */ public static boolean isIntentAvailable(Context context, String action) { final Intent intent = new Intent(action); return isIntentAvailable(context, intent); } /** * Indicates whether the specified Intent has any Activity that will respond * to it. This comes into play if you need to check against an Intent with * a more specific specifier than just the action (i.e. an ACTION_VIEW * Intent, where the given URI determines what starts it). * * @param context the application's environment * @param intent the Intent to check against * @return true if an Activity would respond to that Intent, false otherwise */ public static boolean isIntentAvailable(Context context, Intent intent) { final PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } /** * <p> * Indicates whether there's any valid internet connection at all. This * call doesn't care if said connection is wifi, mobile, Bluetooth, or * whatever. * </p> * * <p> * TODO: This might benefit from some corresponding methods that DO narrow * things down a bit, like making sure it's a high-bandwidth connection. * </p> * * @param context a Context, needed to get the ConnectivityManager * @return true if an internet connection exists, false otherwise */ public static boolean isConnected(Context context) { NetworkInfo networkInfo = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); return (networkInfo != null && networkInfo.isConnected()); } /** * Enables or disables a given component class. So, like a manifest-defined * BroadcastReceiver or whatnot. * * @param context the Context to which the component belongs * @param cls the component's class * @param enabled true to enable, false to disable */ public static void setPackageComponentEnabled(Context context, Class<?> cls, boolean enabled) { ComponentName receiver = new ComponentName(context, cls); PackageManager pm = context.getPackageManager(); pm.setComponentEnabledSetting(receiver, (enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED), PackageManager.DONT_KILL_APP); } }