ios 判断APP启动次数 用于引导页判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios 判断APP启动次数 用于引导页判断相关的知识,希望对你有一定的参考价值。

参考技术A @interface TJXTool : NSObject
+(BOOL)isFirstStarApp;
@end

@implementation TJXTool
+(BOOL)isFirstStarApp
//保证key值得唯一性,一个key只能对应一个对象,代表app启动次数
NSString *key = @"appStarNumber";
//获得
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSNumber *number = [def objectForKey:key];
if(number.integerValue > 0)
//不是第一次,
//上次启动次数+1
// NSString *num = [def objectForKey:@"appStarNumber"];
// NSInteger num1 = num.integerValue;
// num1 += 1;
// [def setObject:num1 forKey:key];
number = [NSNumber numberWithInteger:number.integerValue+1];
[def setObject:number forKey:key];
[def synchronize];
NSLog(@"这是第%ld启动",number.integerValue);
return NO;


@end

Android引导页面

 

应用引导页是现今App的必需品,通过引导页可以第一时间知道此款软件的特色,如何使用。并且能了解到最新的动态和更新。


 第一页,Logo页面或者欢迎页面,判断是否需要进入引导页。

 1 package com.zhang.viewpagerdemo;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.content.SharedPreferences;
 6 import android.os.Bundle;
 7 import android.os.Handler;
 8 import android.os.Message;
 9 
10 public class WelcomeAct extends Activity {
11 
12     private boolean isFirstIn = false;
13     private static final int TIME = 2000;
14     private static final int GO_HOME = 1000;
15     private static final int GO_GUIDE = 1001;
16 
17     private Handler handler = new Handler() {
18 
19         @Override
20         public void handleMessage(Message msg) {
21             super.handleMessage(msg);
22 
23             switch (msg.what) {
24                 case GO_HOME:
25                     goHome();
26                     break;
27                 case GO_GUIDE:
28                     goGuide();
29                     break;
30             }
31         }
32     };
33 
34     @Override
35     protected void onCreate(Bundle savedInstanceState) {
36         super.onCreate(savedInstanceState);
37         setContentView(R.layout.welcome);
38 
39         init();
40     }
41 
42     private void init() {
43         SharedPreferences preferences = getSharedPreferences("myWelcome", MODE_PRIVATE);
44         isFirstIn = preferences.getBoolean("isFirstIn", true);
45         if (!isFirstIn) {
46             handler.sendEmptyMessageDelayed(GO_HOME, TIME);
47         } else {
48             handler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
49             SharedPreferences.Editor editor = preferences.edit();
50             editor.putBoolean("isFirstIn", false);
51             editor.apply();
52         }
53     }
54 
55     private void goHome() {
56         Intent i = new Intent(WelcomeAct.this, MainActivity.class);
57         startActivity(i);
58         finish();
59     }
60 
61     private void goGuide() {
62         Intent i = new Intent(WelcomeAct.this, Guide.class);
63         startActivity(i);
64         finish();
65     }
66 }
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     tools:context="com.zhang.viewpagerdemo.WelcomeAct">
 8 
 9     <ImageView
10         android:layout_width="match_parent"
11         android:layout_height="match_parent"
12         android:background="@drawable/welcome_android" />
13 
14 </LinearLayout>

 


引导页面:

 1 package com.zhang.viewpagerdemo;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.support.v4.view.ViewPager;
 7 import android.view.LayoutInflater;
 8 import android.view.View;
 9 import android.widget.Button;
10 import android.widget.ImageView;
11 
12 import java.util.ArrayList;
13 import java.util.List;
14 
15 /**
16  * Created by Mr.Z on 2016/5/22 0022.
17  */
18 public class Guide extends Activity implements ViewPager.OnPageChangeListener {
19 
20     private ViewPager vp;
21     private ViewPagerAdapter vpAdapter;
22     private List<View> views;
23     private ImageView[] dots;
24     private int[] ids = {R.id.iv1, R.id.iv2, R.id.iv3};
25     private Button btnStart;
26 
27     @Override
28     protected void onCreate(Bundle savedInstanceState) {
29         super.onCreate(savedInstanceState);
30         setContentView(R.layout.guide);
31 
32         initViews();
33 
34         initDots();
35     }
36 
37     private void initViews() {
38 
39         LayoutInflater inflater = LayoutInflater.from(this);
40 
41         views = new ArrayList<>();
42         views.add(inflater.inflate(R.layout.one, null));
43         views.add(inflater.inflate(R.layout.two, null));
44         views.add(inflater.inflate(R.layout.three, null));
45 
46         vpAdapter = new ViewPagerAdapter(views, this);
47 
48         btnStart = (Button) views.get(2).findViewById(R.id.start_btn);
49 
50         vp = (ViewPager) findViewById(R.id.viewpager);
51         vp.setAdapter(vpAdapter);
52         vp.setOnPageChangeListener(this);
53 
54         btnStart.setOnClickListener(new View.OnClickListener() {
55             @Override
56             public void onClick(View v) {
57                 Intent i = new Intent(Guide.this,MainActivity.class);
58                 startActivity(i);
59                 finish();
60             }
61         });
62 
63     }
64 
65     private void initDots() {
66         dots = new ImageView[views.size()];
67         for (int i = 0; i < views.size(); i++) {
68             dots[i] = (ImageView) findViewById(ids[i]);
69         }
70     }
71 
72     @Override
73     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
74 
75     }
76 
77     @Override
78     public void onPageSelected(int position) {
79 
80     }
81 
82     @Override
83     public void onPageScrollStateChanged(int state) {
84         for (int i = 0; i < ids.length; i++) {
85             if (state == i) {
86                 dots[i].setImageResource(R.drawable.login_point_selected);
87             } else {
88                 dots[i].setImageResource(R.drawable.login_point);
89             }
90         }
91     }
92 }
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <android.support.v4.view.ViewPager
 7         android:id="@+id/viewpager"
 8         android:layout_width="match_parent"
 9         android:layout_height="match_parent"
10         android:background="@android:color/black"
11         android:flipInterval="30"
12         android:persistentDrawingCache="animation" />
13 
14     <LinearLayout
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content"
17         android:layout_alignParentBottom="true"
18         android:gravity="center_horizontal"
19         android:orientation="horizontal">
20 
21         <ImageView
22             android:id="@+id/iv1"
23             android:layout_width="wrap_content"
24             android:layout_height="wrap_content"
25             android:src="@drawable/login_point" />
26         <ImageView
27             android:id="@+id/iv2"
28             android:layout_width="wrap_content"
29             android:layout_height="wrap_content"
30             android:src="@drawable/login_point" />
31         <ImageView
32             android:id="@+id/iv3"
33             android:layout_width="wrap_content"
34             android:layout_height="wrap_content"
35             android:src="@drawable/login_point" />
36     </LinearLayout>
37 
38 </RelativeLayout>
 1 package com.zhang.viewpagerdemo;
 2 
 3 import android.content.Context;
 4 import android.support.v4.view.PagerAdapter;
 5 import android.support.v4.view.ViewPager;
 6 import android.view.View;
 7 
 8 import java.util.List;
 9 
10 /**
11  * Created by Mr.Z on 2016/5/22 0022.
12  */
13 public class ViewPagerAdapter extends PagerAdapter {
14 
15     private List<View> views;
16     private Context context;
17 
18     public ViewPagerAdapter(List<View> views, Context context) {
19         this.views = views;
20         this.context = context;
21     }
22 
23     @Override
24     public void destroyItem(View container, int position, Object object) {
25         ((ViewPager) container).removeView(views.get(position));
26     }
27 
28     @Override
29     public Object instantiateItem(View container, int position) {
30 
31         ((ViewPager) container).addView(views.get(position));
32 
33         return views.get(position);
34     }
35 
36     @Override
37     public int getCount() {
38         return views.size();
39     }
40 
41     @Override
42     public boolean isViewFromObject(View view, Object object) {
43         return (view == object);
44     }
45 }

 


主页面:

 1 package com.zhang.viewpagerdemo;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 
 6 public class MainActivity extends AppCompatActivity {
 7 
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.activity_main);
12     }
13 }

 

以上是关于ios 判断APP启动次数 用于引导页判断的主要内容,如果未能解决你的问题,请参考以下文章

[iOS] App引导页的简单实现 (Swift 2)

iOS 启动页和引导页的分割适配法

IOS 一句代码搞定启动引导页

ios开发首次安装或者版本升级的引导页的判断

ios 引导页/启动页/广告页 适配方案

app引导页和启动页有啥区别