• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > AppLaunchChecker

AppLaunchChecker

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了launch windows app,applaunch.prf,applaunch 730,qqprotectapplaunch,launch app等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

AppLaunchChecker


 

Android Support Library 23.3.0 是目前发布的最新版本。

主要修复了Support v4 library, AppCompat library, RecyclerView, MediaRouter library, Design Support Library以及v7 Preference library的若干bug。

详细的更新日志参考官方地址:23.3.0更新日志。

在Support V4包中添加了一个新API:AppLaunchChecker。


下面看一下这个类。

官方解释就是可以查看app在过去是否已经被启动过。通过hasStartedFromLauncher()方法可以判断当前启动是否通过home screen进行启动的。

使用很简单:

在启动activity的onCreate()方法里,调用如下静态方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //
        AppLaunchChecker.onActivityCreate(this);
    }

然后可以在其他你相判断的地方进行判断即可:

 @Override
    protected void onResume() {
        super.onResume();

        if (AppLaunchChecker.hasStartedFromLauncher(this)) {
            Toast.makeText(this, "it's started from launcher", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "it's not started from launcher", Toast.LENGTH_SHORT).show();
        }

    }

用法就如上面所写的那么简单。


那么这个工具类有什么用呢?

我们平时启动app有两种形式,一种是点击屏幕上的图标启动app;另外一种就是通过web界面进行打开app。

通常会对两种形式做不同的操作。所以就需要判断是否是从主屏幕上启动的还是通过别的方式打开的。

package android.support.v4.app;

import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.content.IntentCompat;
import android.support.v4.content.SharedPreferencesCompat;

/**
 * This class provides APIs for determining how an app has been launched.
 * This can be useful if you want to confirm that a user has launched your
 * app through its front door activity from their launcher/home screen, rather
 * than just if the app has been opened in the past in order to view a link,
 * open a document or perform some other service for other apps on the device.
 */
public class AppLaunchChecker {
    private static final String SHARED_PREFS_NAME = "android.support.AppLaunchChecker";
    private static final String KEY_STARTED_FROM_LAUNCHER = "startedFromLauncher";

    /**
     * Checks if this app has been launched by the user from their launcher or home screen
     * since it was installed.
     *
     * 

To track this state properly you must call {@link #onActivityCreate(Activity)} * in your launcher activity's {@link Activity#onCreate(Bundle)} method.

* * @param context Context to check * @return true if this app has been started by the user from the launcher at least once */ public static boolean hasStartedFromLauncher(Context context) { return context.getSharedPreferences(SHARED_PREFS_NAME, 0) .getBoolean(KEY_STARTED_FROM_LAUNCHER, false); } /** * Records the parameters of an activity's launch for later use by the other * methods available on this class. * *

Your app should call this method in your launcher activity's * {@link Activity#onCreate(Bundle)} method to track launch state. * If the app targets API 23 (Android 6.0 Marshmallow) or later, this state will be * eligible for full data backup and may be restored to the user's device automatically.

* * * @param activity the Activity currently running onCreate */ public static void onActivityCreate(Activity activity) { final SharedPreferences sp = activity.getSharedPreferences(SHARED_PREFS_NAME, 0); if (sp.getBoolean(KEY_STARTED_FROM_LAUNCHER, false)) { return; } final Intent launchIntent = activity.getIntent(); if (launchIntent == null) { return; } if (Intent.ACTION_MAIN.equals(launchIntent.getAction()) && (launchIntent.hasCategory(Intent.CATEGORY_LAUNCHER) || launchIntent.hasCategory(IntentCompat.CATEGORY_LEANBACK_LAUNCHER))) { SharedPreferencesCompat.EditorCompat.getInstance().apply( sp.edit().putBoolean(KEY_STARTED_FROM_LAUNCHER, true)); } } }

通过查看该类的源码可以发现,调用onActivityCreate()方法就是通过判断Intent的action和category类型保存到SharedPreference一个boolean类型变量,然后在调用hasStartedFromLauncher()方法的时候去读取该Boolean值,进行判断。

但是如果sharedPreference中已经保存了true值,以后每次的hasStartedFromLauncher()判断都是返回true。

应为在保存变量的时候,它并没有把不是主屏幕启动的false放到SharedPreference中。

所以个人感觉这个设计不合理。(也许该类的真正用途不在于此。)


最后,本人修改了一下这个工具类,从而可以每次正确的判断app是否是从主屏幕启动的,还是别的方式启动的。

代码如下:

public class AppLaunchChecker {
    private static final String SHARED_PREFS_NAME = "android.support.AppLaunchChecker";
    private static final String KEY_STARTED_FROM_LAUNCHER = "startedFromLauncher";
    public static boolean hasStartedFromLauncher(Context context) {
        return context.getSharedPreferences(SHARED_PREFS_NAME, 0)
                .getBoolean(KEY_STARTED_FROM_LAUNCHER, false);
    }
    public static void onActivityCreate(Activity activity) {
        final SharedPreferences sp = activity.getSharedPreferences(SHARED_PREFS_NAME, 0);
        final Intent launchIntent = activity.getIntent();
        if (launchIntent == null) {
            return;
        }
        if (Intent.ACTION_MAIN.equals(launchIntent.getAction())
                && (launchIntent.hasCategory(Intent.CATEGORY_LAUNCHER)
                || launchIntent.hasCategory(IntentCompat.CATEGORY_LEANBACK_LAUNCHER))) {
            SharedPreferencesCompat.EditorCompat.getInstance().apply(
                    sp.edit().putBoolean(KEY_STARTED_FROM_LAUNCHER, true));
        } else {
            SharedPreferencesCompat.EditorCompat.getInstance().apply(
                    sp.edit().putBoolean(KEY_STARTED_FROM_LAUNCHER, false));
        }
    }
}

类名方法名均一致。使用方式也一致!
so easy~~


博文到此结束!感谢大家支持!谢谢~

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • AppLaunchChecker

相关文章

  • 2017-05-26Android入门(九)文件存储与SharedPreferences存储,
  • 2017-05-26Android中使用Notification实现宽视图通知栏(Notification示例二),notification大视图
  • 2017-05-221.8 工程相关解析(各种文件,资源访问)
  • 2017-05-26Android--判断是否连接成功了指定wifi,android--wifi
  • 2017-05-26Android开发:程序目录结构详解
  • 2017-05-26Android开发笔记(5)——方法调用(基础),android笔记
  • 2017-05-26功能强大的StickyHeaderListView:标题渐变、吸附悬停、筛选分类、动态头部,
  • 2017-05-222.4.4 Adapter基础讲解
  • 2017-05-26安卓应用程序的签名
  • 2017-05-26我的Android进阶之旅------Android 5.0中出现警告的解决方法: Service Intent must be explicit:

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 春秋旅行安卓客户端源码项目,旅行安卓客户端源码
    • Android消息机制Handler解析(源码+Demo)
    • Android 急速发布项目到 JitPack,androidjitpack
    • 从视频中每X秒创建一个缩略图
    • 二维码积分兑换商城,积分兑换商城
    • 安卓开源项目周报1220,安卓开源项目1220
    • android 5.0后对于apk 跑32 64 的逻辑
    • did not call through to super.onCreate(),didsuper.oncreate
    • Android 数据库SQLite 写入SD卡,androidsqlite
    • WebView上实现Java与JavaScript交互,webviewjavascript

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有