《第一行代码》阅读记录—Git和Notification

一、Git,版本控制工具

Git和Github简介

Git 是一个开源的分布式版本控制工具,它的开发者就是鼎鼎大名的 Linux 操作系统的作者 Linus Torvalds。Git 被开发出来的初衷本是为了更好地管理 Linux 内核,而现在却早已被广泛应用于全球各种大中小型的项目中。《第一行代码》中用大量笔墨来描写git的命令行写法,然而,我会结合github来一起讲解,首先我们需要下载git到本地,点击进入官网

git 和 github 两个词初学者经常搞不清谁是谁?Git 是一个版本控制工具,是一个可以安装在你自己机器上的软件。Git 这个单词的中文意思是傻x。关于软件为何以 git 命名,它的作者 Linus 曾经这样调侃:

我是个自负的混蛋,所有我的项目都以我自己的名字命名,先有 Linux,现在是 git 。

不过,也有人认为 Git 是 Global Information Tracker(全局信息跟踪器)的缩写形式,我认为这个说法非常能说明 git 的用途,就是对一个文件夹中的所有数据信息做跟踪,通过记录版本的形式来对内容的变化做记录。

Git 的魅力在于开源文化,2008 年 github 的诞生把开源协作的理念更好的进行了推广,因为 Github 让 Git 变得更为易用。确切的说 GitHub 是一家公司,位于旧金山,由 Chris Wanstrath, PJ Hyett 与 Tom Preston-Werner 三位开发者在2008年4月创办。2008年4月10日,GitHub正式成立,地址:How people build software · GitHub ,主要提供基于git的版本托管服务。一经上线,它的发展速度惊为天人,截止目前,GitHub 已经发展成全球最大的开(同)源(性)社区。

当然选择命令行来操作git也是可以的,可以看这个,图文交杂,很容易看懂,git简易指南,接下来,详细讲解github的运用。

Github注册

我们先要注册一个github账号,来到 github 的首页,就可以看到下面的注册界面:
这里写图片描述

填写自己的用户名邮箱,再设置一个酷酷的密码,点击 Sign up for Github 按钮,世界就属于你了。对于开源项目 github 是免费的,所以不用管付费相关的内容。接下来初次注册的用户会看到一共四步的 github 使用教程。

这里写图片描述

今天主要介绍第二步,其他几步回头另行介绍。所以这个四步走,稍微看一下,关了就行了。以后可以到 这里 找到这些内容。另外你可能还会看到要求新用户去验证一下邮箱地址的提示,这个简单,到邮箱之中找到验证邮件,点一下里面的链接就可以了。

注册成功之后你会到 GitHub 的主页面来,你会发现一个导航栏,从左到右依次是 GitHub 主页按钮、搜索框、PR、Issues、Gist、消息提醒、创建项目按钮、我的账号相关。

设置GitHub

新注册的 GitHub 账号,会很简陋,没有自己的项目,第一步我们需要先完善自己的信息,点击右上角自己的小头像,然后选择 Settings 菜单:像头像、Name 建议要设置一个常用的,这两个很有识别性,公开的邮箱也要设置一个,这样那些企业啊、猎头啊就可以通过这个公开邮箱去联系你。

创建项目仓库

Github 上操作虽多,但是都是围绕一个个的项目展开的。

一个项目其实就是一个文件夹,里面放着所有的项目文件,可以是代码,也可以是任意的文档。但是在 github 这里,每一个项目都不仅仅是最新版本的代码,还保持着所有的历史版本和修改记录,当然这个后台就是通过 Git 来实现的。Github 上的项目有一个新名称,叫 ”仓库“ ( repository )。说白了,一个仓库就是一个用 git 进行了版本控制的项目。

点击头像下面的绿色的图标New repository,就可以看到如图:

这里写图片描述

注意要勾选 Initialize this repository with a README ,然后创建这个项目。也会看到 Create Repository 按钮的上方还有两个选择框,一个是关于 .gitignore 的,另一个是关于 LICENSE 的。这两项如果选择了就是在项目中又多了两个文本文件,一个是 .gitignore 文件,另一个是 LICENSE 文件,暂时都不选就可以,回头需要了可以自己用编辑器新建。注意:私人项目是要付费的,这样别人就不能看到你创建的项目,基本上我们默认选择public公共项目,公司的项目就不要放上来开源了,放一些自己写的小项目还是可以的。

GitHub 基本概念

上面认识了 GitHub 的基本面貌之后,你需要了解一些 GitHub 的基本概念,这些概念是你经常会接触并遇到的。

Repository
仓库的意思,即你的项目,你想在 GitHub 上开源一个项目,那就必须要新建一个 Repository ,如果你开源的项目多了,你就拥有了多个 Repositories 。

Issue
问题的意思,举个例子,就是你开源了一个项目,别人发现你的项目中有bug,或者哪些地方做的不够好,他就可以给你提个 Issue ,即问题,提的问题多了,也就是 Issues ,然后你看到了这些问题就可以去逐个修复,修复ok了就可以一个个的 Close 掉。

Star
这个好理解,就是给项目点赞,但是在 GitHub 上的点赞远比微博、知乎点赞难的多,如果你有一个项目获得100个star都算很不容易了!

Fork
这个不好翻译,如果实在要翻译我把他翻译成分叉,什么意思呢?你开源了一个项目,别人想在你这个项目的基础上做些改进,然后应用到自己的项目中,这个时候他就可以 Fork 你的项目,这个时候他的 GitHub 主页上就多了一个项目,只不过这个项目是基于你的项目基础(本质上是在原有项目的基础上新建了一个分支,分支的概念后面会在讲解Git的时候说到),他就可以随心所欲的去改进,但是丝毫不会影响原有项目的代码与结构。

Pull Request
发起请求,这个其实是基于 Fork 的,还是上面那个例子,如果别人在你基础上做了改进,后来觉得改进的很不错,应该要把这些改进让更多的人收益,于是就想把自己的改进合并到原有项目里,这个时候他就可以发起一个 Pull Request(简称PR) ,原有项目创建人就可以收到这个请求,这个时候他会仔细review你的代码,并且测试觉得OK了,就会接受你的PR,这个时候你做的改进原有项目就会拥有了。

Watch
这个也好理解就是观察,如果你 Watch 了某个项目,那么以后只要这个项目有任何更新,你都会第一时间收到关于这个项目的通知提醒。

Gist
有些时候你没有项目可以开源,只是单纯的想分享一些代码片段,那这个时候 Gist 就派上用场了!

编辑项目

之前创建项目成功后就可以跳转到这里:

这里写图片描述

可以看到这个项目只包含了一个 README.md 文件,但是它已经是一个完整的 Git 仓库了,你可以通过对它进行一些操作,如watch、star、fork,还可以 clone 或者下载下来。

小结

以上只是简单的讲了一些基本知识,后面为了篇幅就放上几个前辈的博客,可以系统详尽的学习git知识,一个是peter讲Git,在慕课上讲过sublime的一个大神,还有一个就比较耳熟能详了,安卓入门追的一个大神stormzhang Git汇总,这些足够了解git的所有知识了。

二、Notification,通知

通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。

创建通知

发送通知需要通过 NotificationManager.notify() 来实现,该函数的一个必要参数是 Notification 对象,Notification 对象描述了通知的具体内容,构建该对象需要利用 Notification.Builder 类,Notification.Builder 是 Android 3.0 (API 11) 引入的,为了兼容低版本,我们一般使用 Support V4 包提供的 NotificationCompat.Builder 来构建 Notification。具体代码如下:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)

// 设置通知的基本信息:icon、标题、内容
builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");

// 设置通知的点击行为:这里启动一个 Activity
Intent intent = new Intent(this, ResultActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);

// 发送通知 id 需要在应用内唯一
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, builder.build());

更新通知

要想更新通知,需要利用 NotificationManager.notify() 的 id 参数,该 id 在应用内需要唯一。要想更新特定 id 的通知,只需要创建新的 Notification,并发出与之前所用 id 相同的 Notification。如果之前的通知仍然可见,则系统会根据新的 Notification 对象的内容更新该通知。相反,如果之前的通知已被清除,系统则会创建一个新通知。

删除通知

删除通知可以有多种方式:
1. 通过 NotificationCompat.Builder 设置 setAutoCancel(true),这样当用户点击通知后,通知自动删除。
2. 通过 NotificationManager.cancel(id) 方法,删除指定 id 的通知
3. 通过 NotificationManager.cancelAll() 方法,删除该应用的所有通知

浮动通知(Heads-up Notifications)

Android 5.0(API 21)引入浮动通知的展现形式,想让通知能够以浮动形式展现,需要设置 Notification 的优先级为 PRIORITY_HIGH 或者 PRIORITY_MAX 并且使用铃声或振动,示例代码如下:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)

builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");
// 设置通知的优先级
builder.setPriority(NotificationCompat.PRIORITY_MAX);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// 设置通知的提示音
builder.setSound(alarmSound);

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, builder.build());

锁屏通知

Android 5.0 通知现在还可显示在锁定屏幕上。用户可以通过“设置”选择是否将通知显示在锁定屏幕上,并且您可以指定您应用中的通知在锁定屏幕上是否可见。通过 setVisibility() 并指定以下值之一:
1. VISIBILITY_PUBLIC 显示通知的完整内容。
2. VISIBILITY_SECRET 不会在锁定屏幕上显示此通知的任何部分。
3. VISIBILITY_PRIVATE 显示通知图标和内容标题等基本信息,但是隐藏通知的完整内容。

设置 VISIBILITY_PRIVATE 后,您还可以提供其中隐藏了某些详细信息的替换版本通知内容。例如,短信 应用可能会显示一条通知,指出“您有 3 条新短信”,但是隐藏了短信内容和发件人。要提供此替换版本的通知,请先使用 NotificationCompat.Builder 创建替换通知。创建专用通知对象时,请通过 setPublicVersion() 方法为其附加替换通知。

扩展样式通知

通过 Builder.setStyle() 函数可以为通知设置扩展样式,NotificationCompat 提供了三种扩展样式:BigPictureStyle, BigTextStyle, InboxStyle

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)

builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");

NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle("邮件标题:");
for (int i=0; i < 5; i++) {
    inboxStyle.addLine("邮件内容" + i);
}
builder.setStyle(inBoxStyle);

自定义通知

Android系统允许使用RemoteViews来自定义通知。
自定义普通视图通知高度限制为64dp,大视图通知高度限制为256dp。同时,建议自定义通知尽量简单,以提高兼容性。

自定义通知需要做如下操作:
1、创建自定义通知布局
2、使用RemoteViews定义通知组件,如图标、文字等
3、调用setContent()RemoteViews对象绑定到NotificationCompat.Builder
4、同正常发送通知流程

注意: 避免为通知设置背景,因为兼容性原因,有些文字可能看不清。

RemoteViews bigView;
RemoteViews smallView;

// 构建 bigView 和 smallView。
...

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

// 设置自定义 RemoteViews
builder.setContent(smallView).setSmallIcon(R.drawable.icon_notification);
Notification notification = builder.build();

// 如果系统版本 >= Android 4.1,设置大视图 RemoteViews
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
  notification.bigContentView = bigView;
}
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(DAILY_PUSH_NOTIFICATION_ID, notification);

通知常见属性和常量

通知的提醒方式

1、声音提醒

默认声音

notification.defaults |= Notification.DEFAULT_SOUND;

自定义声音

notification.sound = Uri.parse("file:///sdcard0/notification.ogg");

2、震动提醒

默认振动

notification.defaults |= Notification.DEFAULT_VIBRATE;

自定义振动

long[] vibrate = {100, 200, 300, 400}; //震动效果
// 表示在100、200、300、400这些时间点交替启动和关闭震动 notification.vibrate = vibrate;

3、闪烁提醒

默认闪烁

notification.defaults |= Notification.DEFAULT_LIGHTS;

自定义闪烁

notification.ledARGB = 0xff00ff00; // LED灯的颜色,绿灯
notification.ledOnMS = 300; // LED灯显示的毫秒数,300毫秒
notification.ledOffMS = 1000; // LED灯关闭的毫秒数,1000毫秒
notification.flags |= Notification.FLAG_SHOW_LIGHTS; // 必须加上这个标志

常见的Flags

FLAG_AUTO_CANCEL
当通知被用户点击之后会自动被清除(cancel)
FLAG_INSISTENT
在用户响应之前会一直重复提醒音
FLAG_ONGOING_EVENT
表示正在运行的事件
FLAG_NO_CLEAR
通知栏点击“清除”按钮时,该通知将不会被清除
FLAG_FOREGROUND_SERVICE
表示当前服务是前台服务

以上参考官方api
更多Notification属性详见Notification

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值