android 启动界面广告的显示
2015-12-16 22:23
405 查看
1.问题:
现在很多应用在启动界面加上一些广告或者在特殊的节日显示不同的slogn,具体实现的方案有两种:1. 启动的时候去拉取图片,这样实时性会很高,但是在网络不好的情况下会加载失败
2. 在用户使用应用的过程中将新的图片下载下来,等用户下次启动应用的时候显示出来,这样实时性不高,但是感觉效果较好
我实现的就是第二方案。
2.思路:
第一步:判断是否显示广告图第二步:如果需要, 获取广告图的链接,判断md5(url).jpg的图片是否存在于sd卡中。如果存在就不下载,反之就下载,并设置下一次显示的标志位,并将路径保存起来
第三步:下一次启动时,显示图片就好了
package com.example.cheng.splashtest; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; public class SplashActivity extends Activity { private ImageView adImage; private int SPLASH_DISPLAY_LENGHT = 3000;//3s之后跳转 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_splash); initViews(); SpUtil.init(getApplicationContext()); //初始化shareP showAd(); toMain(); } private void initViews() { adImage = (ImageView)findViewById(R.id.adImage); } private void showAd() { if(SpUtil.getInt(Constant.SP_AD_KEY) == Constant.SHOW_AD) { //显示广告图 Bitmap bm = BitmapFactory.decodeFile(SpUtil.getString(Constant.SP_ADPATH_KEY)); adImage.setImageBitmap(bm); } } private void toMain() { new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this,MainActivity.class); SplashActivity.this.startActivity(intent); SplashActivity.this.finish(); } },SPLASH_DISPLAY_LENGHT); }
package com.example.cheng.splashtest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; /** * Created by cheng on 15/12/16. */ public class MainActivity extends Activity { private String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PhoneUtil.init(getApplicationContext()); checkAd(); } /////////////////////////////////////////////////////// //检查是否显示广告图 //1:判断是否显示广告图 2. 获取广告图的链接,判断md5(url).jpg的图片是否存在于sd卡中 //3.如果存在就不下载,反之就下载,并设置下一次显示的标志位 public void checkAd() { //是否需要显示广告 //if(需要) //{ String filepath = PhoneUtil.getAdPath(); String filename = Md5Util.stringMd5(Constant.AD_URL) + ".jpg"; SpUtil.setString(Constant.SP_ADPATH_KEY, filepath + filename);//将图片的路径保存起来 //判断广告图是否存在 if(!PhoneUtil.isFileExit(filepath+filename)) { Log.v(TAG, "开始下载:" + filepath + filename); //不存在的时候 new DownloadUtil().excute(mAdHandler, Constant.AD_URL, filepath, filename); } // else{ // 如果不需要显示广告可以把本地广告图片删掉 // } } private Handler mAdHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == Constant.HANDLER_DOWNLOAD) { Log.v(TAG,"图片下载成功"); //下载成功之后设置标志位,下一次显示广告 SpUtil.setInt(Constant.SP_AD_KEY,Constant.SHOW_AD); } } }; }
package com.example.cheng.splashtest; import android.content.Context; import android.content.SharedPreferences; /** * Created by ZedLi on 2015/12/16. */ public class SpUtil { private static SharedPreferences mSp; public static void init(Context context) { mSp =context.getSharedPreferences("ad",Context.MODE_PRIVATE); } public static void setInt(String key,int value) { SharedPreferences.Editor editor = mSp.edit(); editor.putInt(key,value); editor.commit(); } public static int getInt(String key) { return mSp.getInt(key, Constant.HIDE_AD); } public static void setString(String key,String value) { SharedPreferences.Editor editor = mSp.edit(); editor.putString(key,value); editor.commit(); } public static String getString(String key) { return mSp.getString(key,null); } }
package com.example.cheng.splashtest; import android.content.Context; import android.os.Environment; import android.util.DisplayMetrics; import java.io.File; /** * Created by ZedLi on 2015/12/1. */ public class PhoneUtil { private static int PHONE_WIDTH; private static int PHONE_HEIGHT; private static String ROOT_PATH; //app项目根目录 private static String AD_PATH;//app存放广告的目录 private static String VIDEO_PATH;//app存放video目录 private static String VOICE_PATH;//app存放Voice目录 public static void init(Context context) { DisplayMetrics dm = context.getResources().getDisplayMetrics(); PHONE_WIDTH = dm.widthPixels; PHONE_HEIGHT = dm.heightPixels; if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) ROOT_PATH = Environment.getExternalStorageDirectory().getPath()+"/"+context.getPackageName()+"/file/"; else ROOT_PATH = context.getFilesDir().getPath().toString()+"/"; AD_PATH = ROOT_PATH + "ad/"; } public static int getPhoneWidth() { return PHONE_WIDTH; } public static int getPhoneHeight() { return PHONE_HEIGHT; } //file目录 public static String getAppFilePath() { File file = new File(ROOT_PATH); if(!file.exists()) { file.mkdirs(); } return ROOT_PATH; } public static String getAdPath() { File file = new File(AD_PATH); if(!file.exists()) { file.mkdirs(); } return AD_PATH; } public static boolean isFileExit(String path) { File file = new File(path); return file.exists(); } }
3. 总结
思路其实很简单,其实就是一个下载图片的过程,为了保证图片的的唯一,我们将图片链接的md5值作为保存的图片名,这样服务器换图片之后,链接也就随之发生了变化,这样就能保证启动图片也能随之变化相关文章推荐
- ANDROID设计招式之美--读书笔记
- 艺术探索读书笔记(一)--Activity启动模式
- Android 中Preference作为布局的应用
- android 多级下拉菜单实现教程
- 设计模式1—策略模式
- 关于 android 中 postDelayed方法的讲解
- Android获取系统屏幕亮/灭屏状态
- android四大组件
- Android- 第一个Android 计算器程序
- Android Studio——点击事件监听
- 《Android群英传》读书笔记(5)第六章:Android绘图机制与处理技巧之一
- Android NDK使用之--用pthread实现多线程
- 深入理解Android 编译系统
- android studio 中去除应用标题栏
- Android下手动挂载分区
- Android学习之Spinner
- android之文件存储路径
- Android Studio for Ubuntu 14.04 无法输入中文解决办法
- SpannableString中的LinkMovementMethod和ClickableSpan的实现安卓可点击有颜色文字使用
- android 使用String.format("%.2f",67.876)自已定义语言(俄语、西班牙语)会把小数点变为逗号