iPviking:在线黑客攻击可视化地图有一个由挪威公司对全世界互联网数据流攻击进行的实时检测可视化数据图,用户可以直观的看到世界各地的攻击数据,这个检测平台可以监测到网络上的各种攻击方式,来源于哪个国家等详细数据。

Read More

显示效果

  • 3GS
  • iPhone 4/4s
  • iPhone 5/5s
  • iPhone 6
  • iPhone 6 Plus

元素素材

真机效果

  • iPhone 5/5s
  • iPhone 6
  • iPhone 6 Plus

Notification是应用程序提醒用户发生某些事件的一种方式,包括以下功能:

  1. 显示状态栏图标
  2. 灯光/LED闪烁
  3. 让手机振动
  4. 发出声音提醒(铃声、Media Store中的音频)
  5. 在通知托盘中显示额外的信息
  6. 在通知栏中使用交互式操作来广播Intent

Notification Manager

NotificationManager是用来处理Notification的系统Service,使用getSystemService方法可以获得对它的引用

1
NotificationManager notificationManager = (NotificationManager)gerSystemService(Context.NOTIFICATION_SERVICE);

通过NotificationManager可以触发新的Notification,修改现有的Notification删除不需要的Notifition

创建Notification

向用户传递信息的方式:

  1. 状态栏图标
  2. 声音、闪光灯和振动
  3. 在展开的通知托盘中显示详细信息

创建Notification和配置状态栏图标

1
Notification notification = new Notification(R.drawable.icon,"Notification",System.currentTimeMills());	// 指定图标,文本,时间戳

还可以设置Notification对象的number属性来显示一个状态栏显示一个状态图标所表示的时间数量

使用默认的Notification声音、闪灯和振动

向Notification添加声音、闪灯和振动效果的可以使用默认的设置:

  • Notification.DEFAULT_LIGHTS 灯
  • Notification.DEFAULT_SOUND 声音
  • Notification.DEFAULT_VIBRATE 振动
    1
    notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;

可以使用Notification.DEFAULT_ALL开启全部

发出声音

使用sound属性向Notification分配一个新的声音并指定音频文件的URI

1
2
Uri ringURI = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
notification.sound = ringURI;

设备振动

首先需要设置权限

1
<user-permission android:name="android.permisson.VIBRATE" />

设置振动方式时,可以向Notification的vibrate属性分配一个long[]类型数组来设置振动和暂停时间的交替

1
notification.vibrate = new long[] {1000,1000,1000,1000}

闪屏

Notification还可以设置设备的LED的颜色和闪烁频率

1
2
3
4
notification.ledARGB = Color.RED;	//设置LED颜色
notification.ledOffMS = 0; //设置LED闪烁的频率
notification.ledOnMS = 1;
notification.flags = notification.flags | Notification.FLAG_SHOW_FIGHTS; // 要使用LED必须添加flags属性

Notification Builder

Api 11(Android 3.0)引入的Api,简化了Notification的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
Notification.Builder builder = new Notification.Builder(mContext);
builer.setSmallIcon(R.drawable.icon);
.setTicker("Notification")
.setWhen(System.currrntTimeMillis())
.setDefaults(Notification.DEFAULT_SOND |
Notification.DEFAULT_VIBRATE)
.setSound(
RingtoneManager.getDefaultUri(
RingtoneManager.TYPE_NOTIFICATION))
.setVibrate(new long[] {1000,1000,1000,1000,1000,1000})
.setLights(Color.RED,0,1);

Notication notification = builder.getNotification();

设置和自定义通知托盘UI

配置Notification的外观主要方法有

  • 设置setLatesEventInfo方法更新标准的通知托盘所显示的详细信息
  • 设置Notification Builder创建和控制众多可选通知托盘UI中的一个
  • 设置contentView和contentIntent属性,以便使用Remote View对象展开的状态显示分配一个自定义的UI
  • 从Api 11(Android 3.0)开始,描述自定义UI的Remote Views对象可以为每个View分配一个Broadcast Intent,以使他们完全可交互

标准的Notification UI

`

onSaveInstanceState

当Activity可能会被销毁时,该Activity的onSaveInstanceState会被执行,除非Activity是主动销毁的。onSaveInstanceState的调用遵循一个规则,即未经允许,则onSaveInstanceState会被系统调用,这是一个保留数据的机会.
通常onSaveInstanceState被调用的情况有:

  1. 当用户按下HOME键时
  2. 长按HOME键,选择运行其他的程序时
  3. 按下电源键(关闭屏幕显示)时
  4. 从Activity启动新的Activity时
  5. 屏幕切换时
    屏幕切换时,系统会销毁Activity再自动创建Activity,onSaveInstance一定会被执行

onRestoreInstanceState

onRestoreInstanceState会在Activity被系统销毁后,被重建时调用,在Activity的onStart之后调用

1
2
3
4
5
6
7
8
9
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(icicle);
savedInstanceState.putLong("param", value);
}
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null){
value = savedInstanceState.getLong("param");
}
}

AutoCompleteTextView工作流程依赖Adapter和Filter,一个处理视图(BaseAdapter),一个是数据过滤(Filterable)

Filter有两个重要方法:

  1. protected FilterResults performFiltering(CharSequence prefix)
    定制过滤策略,根据输入的prefix对数据进行过滤,并组装成FilterResults结果返回
  2. protected void publisgResults(CharSequence constraint,FilterResults results)
    发布结果,把上面方法的结果按照一定的要求处理后,通知Adapter进行数据视图刷新

1
2
3
4
5
6
7
PopupWindow mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.window,null),LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
mPop.setAnimationStyle(R.style.AnimationPreview);
mPop.setOutsideTouchable(true); // 点击外部是否关闭
mPop.setFocusable(false); // 设置PopupWindow能否获得焦点
mPop.showAsDropDown(anchor,0,0); // 设置显示PopupWindow的位置在View的下方,x,y表示坐标偏移量
mPop.showAtLocation(findViewById(R.id.parent),Gravity.LEFT,0,-90); // 以某个View为参考,表示弹出窗口以parent组件为参考,位于左侧,偏移-90
mPop.setOnDismissListenerd(new PopupWindow.OnDismissListener(){}); // 设置窗口消失事件

在Objective-C中,nil是一个指针不存在的对象。
Swift中,nil是一个空值,不单单指指针,任何可选变量都可以被设为nil,且不能用于非可选类型。

1
var num : Int ? = 4	//可选类型,要么为nil要么为4