在app里面知道,一般第一次安app或者app做了版本更新的时候这个时候会出现引导页,这个时候引导页会对面进行了一些介绍,使用功能什么的,在下一次进入的时候就不会再出现这个页面,为了实现这个我们需要使用到共享参数.引导页一般也就三个页面或者什么的,下面看代码。我们需要把以前登录的状态进行保留,如何保留,保留在哪里合适呢Sharedpreferences这个类,但是如果你把这个软件删了,这个值也就丢了,说明这个文件与app相关,这里可以在tool里面看,File explorer里面可以看到。/data/data/<package name>/shared_prefs在这里面,当我们删了应用程序时,也就消失了
简单介绍这个类:网上搜的如果是Android应用,最适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其实质是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。因为SharedPreferences是使用xml文件保存数据,Context.getSharedPreferences(name, mode)方法的第一个参数用于指定该文件的名称,名称不用指定后缀,后缀会由Android自动添加。方法的第二个参数指定文件的操作模式,共有四种操作模式,这四种模式前面介绍使用文件方式保存数据时已经讲解过。如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。此外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。
意思就是这个类如何存储数据的呢还是通过文件的方式把数据存储起来,存储地址是/data/data/<package name>/shared_prefs。大概就是文件io流的封装吧,只是他已经帮我们封装好了。下面我们这个引导页也需要保存个数据。不可能每次用户打开app都有引导页把,所以就是有个类似判断的东西,如果是第一次我就让你出现(或者版本跟新了),如果不是第一次,就不让你出现。
1.存什么值呢,存版本。取什么取key值就可以2.什么时候存:当引导面消失之前一定要存了,什么时候取:进入刚打开进入广告页的时候取,因为我们打开app的时候就是logo页,就行了。
2.了解一下这个sharedprefams的存取方式:首先是存:
SharedPreferences获取的方式有两种一个是通过cotext,一个是通过activty,context是一个抽象类,它的子类有activty和application。coentext作用就是获取资源。自己工程的资源,就可以通过它的子类来拿,自己的版本号也属于自己的资源。context获取的资源整个工程都可以访问的。activty是当前页面可以修改的。
private static SharedPreferences sp;
sp = con.getSharedPreferences("file", Context.MODE_PRIVATE);//con是我们传进来的一个context。activty是getPreferences()这个方法了。在这里这个con也可以变成this.代表当前activty了。里面有两个参数第一个文件名,第二个是模式一共有四种代表存储的方式,我们的这种就是私有覆盖的,只能自己应用访问,且新的覆盖旧的。第二个有了这个对象我们就需要对其进行存储了:首先出现了一个Editor对象,通过共享参数的edit方法,这是一个以键值对来存的。SharedPreferences.Editor ED=sp.edit(); ED.putString("name",versionName(con)); ED.commit();接着如何取呢:利用它的getString()方法,里面有两个值,一个是key值,一个是默认值,没取到的返回值,这里给它null。sp = con.getSharedPreferences("file", Context.MODE_PRIVATE);String str= sp.getString("name",null);
2.由于需要操作两个actity的页面,引导页和logo页,那么这个时候共享参数写在那个类里面呢,提取一个工具类,方便两个acacity访问,方法都static就行了
这个就是封装好了的。
public class Utilshard { private static SharedPreferences sp;
//首先由于自己没有context对象,所以需要传一个,来获取这个共享参数,调用资源
public static void saveserrion(Context con)
{
//当没有这个对象的时候才创建类似单例,这样更简单。 if(sp==null) { sp = con.getSharedPreferences("file", Context.MODE_PRIVATE); } SharedPreferences.Editor ED=sp.edit(); ED.putString("name",versionName(con)); ED.commit(); } public static boolean getserrion(Context con) { if(sp==null) { sp = con.getSharedPreferences("file", Context.MODE_PRIVATE); } String str= sp.getString("name",null); //如果版本是空的,或者版本号不一致返回true,说明要显示这个引导页。 if(str==null|| !str.equals(versionName(con))) { return true; }else { return false; } } public static String versionName(Context con) { PackageManager pm = con.getPackageManager(); PackageInfo pi = null;//getPackageName()是你当前类的包名,0代表是获取版本信息 try { pi = pm.getPackageInfo(con.getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return pi.versionName; } }
4.获取共享参数:在广告页的oncreate方法时就开始获取进行判断
public class LogoActivty extends BaseActivity { RadioButton rb7=(RadioButton)findViewById(R.id.radioButton); private Handler handler=new Handler() { @Override public void handleMessage(Message msg) { rb7.setText(msg.what+"s"); } }; @Override public void setview() { setContentView(R.layout.logo); if(Utilshard.getserrion(this)) {
//注意这个地方没有的话进行存一次就ok了,这样就好了 Utilshard.saveserrion(this); Intent in=new Intent(LogoActivty.this,LeadActivity.class); startActivity(in);
//记住关了广告页。
finish();
}else
5.现在还需要获取版本号,版本信息,如何获取呢
首先使用Packagemanager包,然后获取当前版本信息。
pi = pm.getPackageInfo(con.getPackageName(), 0);拿到这个就可以获取到版本号或者信息都没问题了
PackageManager pm = con.getPackageManager(); PackageInfo pi = null;//getPackageName()是你当前类的包名,0代表是获取版本信息 try { pi = pm.getPackageInfo(con.getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return pi.versionName; }这里基本就把一个共享参数封装好了