Android开发——查询/卸载手机里的应用、应用图标创建

1. 获取手机里的所有已安装的应用

以前写过一个SoftProviderUtil工具类,拿出来分享一个。通过PackageManager,不仅可以获取PackageName,判断此进程是否为系统应用安装位置(在内存卡还是SD卡),还可以应用名称以及应用图标代码如下。其中SoftInfo为自定义的业务类,成员变量即为要获取的信息,加上set/get方法即可。

/**
 * For Info of InstalledPackages
 * Created by user on 2016/4/23.
 */
public class SoftProviderUtil {
    public static  List getSoftInfo(Context context){
        PackageManager packageManager = context.getPackageManager();
        List installedPackages = packageManager.getInstalledPackages(0);
        List infos = new ArrayList<>();
        for(PackageInfo info : installedPackages) {
            SoftInfo info_item = new SoftInfo();
            String packageName = info.packageName;
            //应用名字和图标
            String name = info.applicationInfo.loadLabel(packageManager).toString();
            Drawable drawable = info.applicationInfo.loadIcon(packageManager);
            //应用程序信息的标记
            int flags = info.applicationInfo.flags;

            if((flags & ApplicationInfo.FLAG_SYSTEM)== 0){
                //是用户应用
                info_item.setUserAPP(true);
            }else {
                //系统应用
                info_item.setUserAPP(false);
            }
            if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE)== 0){
                //内存储
                info_item.setInMemory(true);
            }else {
                //外存储
                info_item.setInMemory(false);
            }
            info_item.setName(name);
            info_item.setPackageName(packageName);
            info_item.setDrawable(drawable);
            infos.add(info_item);
        }
        return infos;
    }
}


2. 卸载则是通过

卸载动作则是通过发送指定Action和Data来完成。参数为指定包名。

Intent intent_uninstall = new Intent();
intent_uninstall.setAction("android.intent.action.VIEW");
intent_uninstall.setAction("android.intent.action.DELETE");
intent_uninstall.addCategory("android.intent.category.DEFAULT");
intent_uninstall.setData(Uri.parse("package:" + packageName));
startActivityForResult(intent_uninstall,0);

3. 创建应用图标

卸载操作会相应的删除对应的应用图标以及桌面图标。当然,前提是有桌面图标。一般在应用刚开始被启动时,便会判断是否已经存在了自己应用的图标,如果存在就不用再创建了,否则桌面上会出现两个或者更多图标。如果不存在,便可以使用Intent发送请求,Launcher通过自己注册的InstallShortCutReceiver实现快捷方式图标的生成过程。

public static boolean hasShortCut(Context context) { 
        String url = ""; 
        System.out.println(getSystemVersion()); 
        if(getSystemVersion() < 8){ 
            url = "content://com.android.launcher.settings/favorites?notify=true"; 
        }else{ 
            url = "content://com.android.launcher2.settings/favorites?notify=true"; 
        } 
        ContentResolver resolver = context.getContentResolver(); 
        Cursor cursor = resolver.query(Uri.parse(url), null, "title=?", 
                        new String[] {context.getString(R.string.app_name)}, null); 
 
        if (cursor != null && cursor.moveToFirst()) { 
                cursor.close(); 
                return true; 
        } 
 
        return false; 
    } 
private static int getSystemVersion(){ 
        return android.os.Build.VERSION.SDK_INT; 
    } 

private void installShortCut() {
        if(hasShortCut)
            return;
        Intent intent = new Intent();
        intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        //三个信息  图标,名字,以及点击逻辑
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"XXXX");
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher));
        //封装一个intent
        Intent shortcut = new Intent();
        shortcut.setAction("android.intent.action.MAIN");
        shortcut.addCategory("android.intent.category.LAUNCHER");
        shortcut.setClassName(pckageName,".SplashActivity");
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,shortcut);
        //发送广播
        sendBroadcast(intent);
        edit.putBoolean("shortcut",true);
        edit.commit();
    }

Android开发——查询/卸载手机里的应用、应用图标创建_第1张图片

转载于:https://www.cnblogs.com/qitian1/p/6461611.html

你可能感兴趣的:(移动开发)