SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
Johnny Sung
Developing
2014.08.27 @ Android Taipei
Johnny Sung
https://fb.com/j796160836
Mobile devices Developer
https://plus.google.com/+JohnnySung
這是什麼?好酷喔
這要怎麼⽤用
Ok, Glass
Ok, Glass
怎麼沒有螢幕?
你可以幫我測⼀一下戰⾾鬥⼒力嗎?
他有什麼功能?
要怎麼拍照?
要怎麼開?
你怎麼會有真假
要抬頭啦
抬頭才有螢幕
⼀一窺Google 眼鏡 的 內部構造
http://www.catwig.com/google-glass-teardown/
rrr
MyGlass 連接 Google Glass
Timeline (時間軸)
https://www.youtube.com/watch?v=jK3WLILYhQs
Clock
Live Card Static Card
Clock
Static Card
Now Past
Clock
Live Card
Settings
Glass development
• Mirror API
• Glass Development Kit (GDK)
Glass development
• Mirror API
• Periodic notifications & Static Card

(Push notifications)
• Glass Development Kit (GDK)
• Ongoing task & Live Card (活動卡⽚片,即時卡⽚片)
• Immersion (沉浸式體驗,獨佔式體驗)
• Hybrid
Periodic notifications (Static Card)
Ongoing task (Live Card)
Hybrid Model
Glass Development Kit (GDK)
Glass Development Kit Sneak Peek
4.0.3 (API 15
Glass Development Kit Preview

4.4.2 (API 19)
Glass Development Kit Sneak Peek

4.0.3 (API 15)
Android 4.4.2 KitKat (API 19)
Android L
=.
.
等⼀一下,先不要這麼著急...
開新專案 :)
因為會變成這副德性
What the …
Glass development
• Glass Development Kit (GDK)
• Ongoing task & Live Card (活動卡⽚片,即時卡⽚片)
• Low Frequency Rendering
• High Frequency Rendering
• Immersion (沉浸式體驗,獨佔式體驗)
LiveCard
Low Frequency
Rendering
public class LiveCardService extends Service {	
!
	 private LiveCard mLiveCard;	
	 private RemoteViews mLiveCardView;	
!
	 @Override	
	 public int onStartCommand(Intent intent, int flags, int startId) {	
	 	 if (mLiveCard == null) {	
	 	 	 mLiveCard = new LiveCard(this, "LiveCardDemo");	
	 	 	 mLiveCardView = new RemoteViews(getPackageName(),	
	 	 	 	 	 R.layout.main_layout);	
	 	 	 // ...	
	 	 	 Intent menuIntent = new Intent(this, MenuActivity.class);	
	 	 	 menuIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK	
	 	 	 	 	 | Intent.FLAG_ACTIVITY_CLEAR_TASK);	
	 	 	 mLiveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent,	
	 	 	 	 	 0));	
	 	 	 mLiveCard.publish(PublishMode.REVEAL);	
	 	 }	
	 	 return START_STICKY;	
	 }	
!
	 @Override	
	 public void onDestroy() {	
	 	 if (mLiveCard != null && mLiveCard.isPublished()) {	
	 	 	 mLiveCard.unpublish();	
	 	 	 mLiveCard = null;	
	 	 }	
	 	 super.onDestroy();	
	 }	
	 // ...	
}
Low-frequency Livecard
AndroidManifest.xml
(因版⾯面限制,故隱藏省略部分內容)
!
mLiveCardView.setTextViewText(R.id.sample_text, "Hello, World.");	
mLiveCard.setViews(mLiveCardView);	
Update Remote Views
http://developer.android.com/reference/android/widget/RemoteViews.html
Code Examples
http://goo.gl/ceX1QI
Referance:
https://developers.google.com/glass/develop/gdk/live-cards
Low-frequency Livecard Demo
High Frequency
Rendering
@Override	
	 public int onStartCommand(Intent intent, int flags, int startId) {	
	 	 if (mLiveCard == null) {	
	 	 	 mLiveCard = new LiveCard(this, LIVE_CARD_TAG);	
!
	 	 	 mLiveCard.setDirectRenderingEnabled(true).getSurfaceHolder()	
	 	 	 	 	 .addCallback(mHelloDrawer);	
!
	 	 	 Intent menuIntent = new Intent(this, MenuActivity.class);	
	 	 	 menuIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK	
	 	 	 	 	 | Intent.FLAG_ACTIVITY_CLEAR_TASK);	
	 	 	 mLiveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0));	
	 	 	 mLiveCard.attach(this);	
	 	 	 mLiveCard.publish(PublishMode.REVEAL);	
	 	 } else {	
	 	 	 mLiveCard.navigate();	
	 	 }	
!
	 	 return START_STICKY;	
	 }	
	 @Override	
	 public void onDestroy() {	
	 	 if (mLiveCard != null && mLiveCard.isPublished()) {	
	 	 	 mLiveCard.unpublish();	
	 	 }	
	 	 super.onDestroy();	
	 } HelloService.java
onStartCommand() & publish live card
(因版⾯面限制,故隱藏省略部分內容)
public class HelloDrawer implements DirectRenderingCallback {	
!
	 private SurfaceHolder mHolder;	
!
	 @Override	
	 public void surfaceCreated(SurfaceHolder holder) {	
	 	 mHolder = holder;	
	 }	
!
	 @Override	
	 public void surfaceDestroyed(SurfaceHolder holder) {	
	 	 mHolder = null;	
	 }	
!
	 public void draw() {	
	 	 Canvas canvas;	
	 	 try {	
	 	 	 canvas = mHolder.lockCanvas();	
	 	 } catch (Exception e) {	
	 	 	 return;	
	 	 }	
	 	 mHolder.unlockCanvasAndPost(canvas);	
	 }	
!
	 // ...	
} HelloDrawer.java
SurfaceHolder
(因版⾯面限制,故隱藏省略部分內容)
public HelloDrawer(Context context) {	
	 	 mView = new HelloView(context);	
	 	 mView.setListener(mListener);	
	 	 this.context = context;	
	 }
!
	 @Override	
	 public void surfaceChanged(SurfaceHolder holder, int format, int width,	
	 	 	 int height) {	
	 	 // Measure and layout the view with the canvas dimensions.	
	 	 int measuredWidth = View.MeasureSpec.makeMeasureSpec(width,	
	 	 	 	 View.MeasureSpec.EXACTLY);	
	 	 int measuredHeight = View.MeasureSpec.makeMeasureSpec(height,	
	 	 	 	 View.MeasureSpec.EXACTLY);	
!
	 	 mView.measure(measuredWidth, measuredHeight);	
	 	 mView.layout(0, 0, mView.getMeasuredWidth(), mView.getMeasuredHeight());	
	 	 draw();	
	 }
!
	 public void draw() {	
	 	 Canvas canvas = mHolder.lockCanvas();	
	 	 // ...	
	 	 mView.draw(canvas);	
	 	 // ...	
	 	 mHolder.unlockCanvasAndPost(canvas);	
	 } HelloDrawer.java
Init HelloView & Drawing
(因版⾯面限制,故隱藏省略部分內容)
public HelloView(Context context, AttributeSet attrs, int style) {	
	 	 super(context, attrs, style);	
!
	 	 LayoutInflater.from(context).inflate(R.layout.card_main, this);	
	 	 sampleTextview = (TextView) findViewById(R.id.sample_txt);	
	 	 updateText();	
	 }	
!
	 protected void updateText() {	
	 	 if (mChangeListener != null) {	
	 	 	 mChangeListener.onChange(); // call draw() to update view	
	 	 }	
	 }	
!
	 public void changeText(String text) {	
	 	 sampleTextview.setText(text);	
	 	 updateText();	
	 }	
HelloView.java
Inflate View & Change text
(因版⾯面限制,故隱藏省略部分內容)
@Override	
	 public void surfaceCreated(SurfaceHolder holder) {	
	 	 // ...	
	 	 context.registerReceiver(mBroadcast, new IntentFilter(MY_MESSAGE));	
	 }	
!
	 @Override	
	 public void surfaceDestroyed(SurfaceHolder holder) {	
	 	 // ...	
	 	 context.unregisterReceiver(mBroadcast);	
	 }	
!
	 private BroadcastReceiver mBroadcast = new BroadcastReceiver() {	
	 	 @Override	
	 	 public void onReceive(Context mContext, Intent mIntent) {	
	 	 	 if (mIntent.getAction().equals("change_text")) {	
	 	 	 	 mView.changeText("I'm lovin' it.");	
	 	 	 }	
	 	 }	
	 };
HelloDrawer.java
BroadcastReceiver
(因版⾯面限制,故隱藏省略部分內容)
Code Examples
Referance:
https://developers.google.com/glass/develop/gdk/live-cards
http://goo.gl/6M4gnG
HelloGlass
Immersion ?
public class HelloActivity extends Activity {	
!
	 private TextView sampleTextview;	
!
	 @Override	
	 protected void onCreate(Bundle savedInstanceState) {	
	 	 super.onCreate(savedInstanceState);	
	 	 setContentView(R.layout.card_main);	
!
	 	 sampleTextview = (TextView) findViewById(R.id.sample_txt);	
	 }	
	 	
}
As same as android :D
Voice trigger
ok glass, show me a demo
Voice trigger
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"	
package="com.example.helloglass"	
android:versionCode="1"	
android:versionName="1.0" >	
!
<uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT" />	
!
<application>	
<service	
android:name=".HelloService"	
android:icon="@drawable/ic_note"	
android:label="@string/app_name" >	
<intent-filter>	
<action android:name="com.google.android.glass.action.VOICE_TRIGGER" />	
</intent-filter>	
<meta-data	
android:name="com.google.android.glass.VoiceTrigger"	
android:resource="@xml/voice_trigger_start" />	
</service>	
</application>	
</manifest>
(因版⾯面限制,故隱藏省略部分內容)
Voice trigger
• res/xml/voice_trigger_start.xml
• res/values/strings.xml
!
<?xml version="1.0" encoding="utf-8"?>	
<trigger keyword="@string/glass_voice_trigger" />	
<?xml version="1.0" encoding="utf-8"?>	
<resources>	
<string name="glass_voice_trigger">Hello Glass Activity</string>	
</resources>
VoiceTriggers.Command
• add an event
• calculate
• call me a car
• capture a panorama
• check me in
• check this out
• control my car
• control my home
• explore nearby
• explore the stars
• find a bike
• find a dentist
• find a doctor
• find a hospital
• find a passage
• find a place
• find a place to stay
• find a product
• find a recipe
• find a video
• find a website
• find reviews
• find the exchange rate
• find the price
• flip a coin
• give me feedback
• help me sign in
• keep me awake
• learn an instrument
• learn a song
Pick one you like !
Layout
Layout
• https://developers.google.com/glass/develop/gdk/ui-widgets
• https://developers.google.com/glass/design/style
• Screen Size: 640 x 320
• Padding: 40 x 40
• Bottom Bar: 560 x 40
Layout
Touch input
Keypad
Swipe down translates to KEYCODE_BACK.
A camera button press

translates to KEYCODE_CAMERA.
Tap translates to KEYCODE_DPAD_CENTER.
Keypad
	 @Override	
	 public boolean onKeyDown(int keyCode, KeyEvent event) {	
	 	 if (keyCode == KeyEvent.KEYCODE_CAMERA) {	
	 	 	 // ...	
	 	 	 return true;	
	 	 }	
	 	 return false;	
	 }
	 @Override	
	 public boolean onKeyLongPress(int keyCode, KeyEvent event) {	
	 	 if (keyCode == KeyEvent.KEYCODE_CAMERA) {	
	 	 	 // ...	
	 	 	 return true;	
	 	 }	
	 	 return false;	
	 }
	 @Override	
	 public boolean onKeyUp(int keyCode, KeyEvent event) {	
	 	 if (keyCode == KeyEvent.KEYCODE_CAMERA) {	
	 	 	 // ...	
	 	 	 return true;	
	 	 }	
	 	 return false;	
	 }
MainActivity.java
!
	 @Override	
	 public boolean onGenericMotionEvent(MotionEvent event) {	
	 	 if (mGestureDetector != null) {	
	 	 	 return mGestureDetector.onMotionEvent(event);	
	 	 }	
	 	 return false;	
	 }	
!
	 public GestureDetector mGestureDetector;	
!
	 @Override	
	 protected void onCreate(Bundle savedInstanceState) {	
	 	 super.onCreate(savedInstanceState);	
	 	 setContentView(R.layout.control_main);	
!
	 	 mGestureDetector = createGestureDetector(this);	
	 }	
GestureDetector
MainActivity.java
!
	 private GestureDetector createGestureDetector(Context context) {	
	 	 GestureDetector gestureDetector = new GestureDetector(context);	
	 	 // Create a base listener for generic gestures	
	 	 gestureDetector.setBaseListener(new GestureDetector.BaseListener() {	
	 	 	 @Override	
	 	 	 public boolean onGesture(Gesture gesture) {	
	 	 	 	 if (gesture == Gesture.TAP) {	
	 	 	 	 	 Log.v(TAG, "TAP");	
!
	 	 	 	 	 return true;	
	 	 	 	 } else if (gesture == Gesture.TWO_TAP) {	
	 	 	 	 	 Log.v(TAG, "TWO_TAP");	
!
	 	 	 	 	 return true;	
	 	 	 	 }	
	 	 	 	 return false;	
	 	 	 }	
	 	 });	
	 	 return gestureDetector;	
	 }
GestureDetector
MainActivity.java
• SWIPE_DOWN
• TWO_SWIPE_DOWN
• SWIPE_LEFT
• TWO_SWIPE_LEFT
• SWIPE_RIGHT
• TWO_SWIPE_RIGHT
• SWIPE_UP
• TWO_SWIPE_UP
Gestures
• TAP
• TWO_TAP
• THREE_TAP
• LONG_PRESS
• TWO_LONG_PRESS
• THREE_LONG_PRESS
Q & A
http://fb.com/groups/glassdev.taiwan
Google glass developer Taiwan

Contenu connexe

Tendances

Vidéo approche en immobilier
Vidéo approche en immobilierVidéo approche en immobilier
Vidéo approche en immobilier
hervepouliot
 
Kick start your experience with android wear - Codemotion Rome 2015
Kick start your experience with android wear - Codemotion Rome 2015Kick start your experience with android wear - Codemotion Rome 2015
Kick start your experience with android wear - Codemotion Rome 2015
Codemotion
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
Yekmer Simsek
 

Tendances (20)

The Ring programming language version 1.8 book - Part 12 of 202
The Ring programming language version 1.8 book - Part 12 of 202The Ring programming language version 1.8 book - Part 12 of 202
The Ring programming language version 1.8 book - Part 12 of 202
 
Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)
 
Jak vyvinout úspěšnou aplikaci pro Google Glass (Martin Pelant, eMan)
Jak vyvinout úspěšnou aplikaci pro Google Glass (Martin Pelant, eMan)Jak vyvinout úspěšnou aplikaci pro Google Glass (Martin Pelant, eMan)
Jak vyvinout úspěšnou aplikaci pro Google Glass (Martin Pelant, eMan)
 
Discontinuing Reader Matches
Discontinuing Reader MatchesDiscontinuing Reader Matches
Discontinuing Reader Matches
 
The Ring programming language version 1.9 book - Part 14 of 210
The Ring programming language version 1.9 book - Part 14 of 210The Ring programming language version 1.9 book - Part 14 of 210
The Ring programming language version 1.9 book - Part 14 of 210
 
Mad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screeningsMad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screenings
 
The Ring programming language version 1.10 book - Part 67 of 212
The Ring programming language version 1.10 book - Part 67 of 212The Ring programming language version 1.10 book - Part 67 of 212
The Ring programming language version 1.10 book - Part 67 of 212
 
Mgd08 lab01
Mgd08 lab01Mgd08 lab01
Mgd08 lab01
 
The Ring programming language version 1.10 book - Part 132 of 212
The Ring programming language version 1.10 book - Part 132 of 212The Ring programming language version 1.10 book - Part 132 of 212
The Ring programming language version 1.10 book - Part 132 of 212
 
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton ClassesJava Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
 
Create xo game in android studio
Create xo game in android studioCreate xo game in android studio
Create xo game in android studio
 
Vidéo approche en immobilier
Vidéo approche en immobilierVidéo approche en immobilier
Vidéo approche en immobilier
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 
Kick start your experience with android wear - Codemotion Rome 2015
Kick start your experience with android wear - Codemotion Rome 2015Kick start your experience with android wear - Codemotion Rome 2015
Kick start your experience with android wear - Codemotion Rome 2015
 
TechDay: Kick Start Your Experience with Android Wear - Mario Viviani
TechDay: Kick Start Your Experience with Android Wear - Mario VivianiTechDay: Kick Start Your Experience with Android Wear - Mario Viviani
TechDay: Kick Start Your Experience with Android Wear - Mario Viviani
 
Final tagless and cats mtl
Final tagless and cats mtl Final tagless and cats mtl
Final tagless and cats mtl
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
The Ring programming language version 1.7 book - Part 60 of 196
The Ring programming language version 1.7 book - Part 60 of 196The Ring programming language version 1.7 book - Part 60 of 196
The Ring programming language version 1.7 book - Part 60 of 196
 
Capture image on eye blink
Capture image on eye blinkCapture image on eye blink
Capture image on eye blink
 
J2 me 07_5
J2 me 07_5J2 me 07_5
J2 me 07_5
 

En vedette (6)

[Android] 多執行緒 - Handler和Thread的關係
[Android] 多執行緒 - Handler和Thread的關係[Android] 多執行緒 - Handler和Thread的關係
[Android] 多執行緒 - Handler和Thread的關係
 
Annotation processing
Annotation processingAnnotation processing
Annotation processing
 
Facebook用AI改進OpenStreetMap圖資
Facebook用AI改進OpenStreetMap圖資Facebook用AI改進OpenStreetMap圖資
Facebook用AI改進OpenStreetMap圖資
 
Tainan Bus Map
Tainan Bus MapTainan Bus Map
Tainan Bus Map
 
Java 8 與 retrolambda
Java 8 與 retrolambdaJava 8 與 retrolambda
Java 8 與 retrolambda
 
Android Thread
Android ThreadAndroid Thread
Android Thread
 

Similaire à Developing Google Glass

Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
 
Webgl para JavaScripters
Webgl para JavaScriptersWebgl para JavaScripters
Webgl para JavaScripters
gerbille
 
HTML5 & The Open Web - at Nackademin
HTML5 & The Open Web -  at NackademinHTML5 & The Open Web -  at Nackademin
HTML5 & The Open Web - at Nackademin
Robert Nyman
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
Droidcon Berlin
 

Similaire à Developing Google Glass (20)

Building Glassware with the Glass Development Kit
Building Glassware with the Glass Development KitBuilding Glassware with the Glass Development Kit
Building Glassware with the Glass Development Kit
 
CocoaHeads Toulouse - Guillaume Cerquant - UIView
CocoaHeads Toulouse - Guillaume Cerquant - UIViewCocoaHeads Toulouse - Guillaume Cerquant - UIView
CocoaHeads Toulouse - Guillaume Cerquant - UIView
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
 
Webgl para JavaScripters
Webgl para JavaScriptersWebgl para JavaScripters
Webgl para JavaScripters
 
Android accessibility for developers and QA
Android accessibility for developers and QAAndroid accessibility for developers and QA
Android accessibility for developers and QA
 
Writing Mirror API and Native Apps for Google Glass
Writing Mirror API and Native Apps for Google GlassWriting Mirror API and Native Apps for Google Glass
Writing Mirror API and Native Apps for Google Glass
 
HTML5 & The Open Web - at Nackademin
HTML5 & The Open Web -  at NackademinHTML5 & The Open Web -  at Nackademin
HTML5 & The Open Web - at Nackademin
 
YUI 3
YUI 3YUI 3
YUI 3
 
Improving android experience for both users and developers
Improving android experience for both users and developersImproving android experience for both users and developers
Improving android experience for both users and developers
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
 
Javascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & AngularJavascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & Angular
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGL
 
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
 
Developing AIR for Android with Flash Professional
Developing AIR for Android with Flash ProfessionalDeveloping AIR for Android with Flash Professional
Developing AIR for Android with Flash Professional
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
 
State of jQuery and Drupal
State of jQuery and DrupalState of jQuery and Drupal
State of jQuery and Drupal
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
Vaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UIVaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UI
 

Plus de Johnny Sung

Android Wear Development
Android Wear DevelopmentAndroid Wear Development
Android Wear Development
Johnny Sung
 

Plus de Johnny Sung (20)

[AI / ML] 用 LLM (Large language model) 來整理您的知識庫 @Devfest Taipei 2023
[AI / ML] 用 LLM (Large language model) 來整理您的知識庫 @Devfest Taipei 2023[AI / ML] 用 LLM (Large language model) 來整理您的知識庫 @Devfest Taipei 2023
[AI / ML] 用 LLM (Large language model) 來整理您的知識庫 @Devfest Taipei 2023
 
[Flutter] Flutter Provider 看似簡單卻又不簡單的狀態管理工具 @ Devfest Kaohsiung 2023
[Flutter] Flutter Provider 看似簡單卻又不簡單的狀態管理工具 @ Devfest Kaohsiung 2023[Flutter] Flutter Provider 看似簡單卻又不簡單的狀態管理工具 @ Devfest Kaohsiung 2023
[Flutter] Flutter Provider 看似簡單卻又不簡單的狀態管理工具 @ Devfest Kaohsiung 2023
 
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang) [Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
 
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
 
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
 
談談 Android constraint layout
談談 Android constraint layout談談 Android constraint layout
談談 Android constraint layout
 
炎炎夏日學 Android 課程 - Part3: Android app 實作
炎炎夏日學 Android 課程 - Part3: Android app 實作炎炎夏日學 Android 課程 - Part3: Android app 實作
炎炎夏日學 Android 課程 - Part3: Android app 實作
 
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
 
炎炎夏日學 Android 課程 - Part2: Android 元件介紹
炎炎夏日學 Android 課程 - Part2: Android 元件介紹炎炎夏日學 Android 課程 - Part2: Android 元件介紹
炎炎夏日學 Android 課程 - Part2: Android 元件介紹
 
炎炎夏日學 Android 課程 - Part 0: 環境搭建
炎炎夏日學 Android 課程 - Part 0: 環境搭建炎炎夏日學 Android 課程 - Part 0: 環境搭建
炎炎夏日學 Android 課程 - Part 0: 環境搭建
 
About Mobile Accessibility
About Mobile AccessibilityAbout Mobile Accessibility
About Mobile Accessibility
 
Introductions of Messaging bot 做聊天機器人
Introductions of Messaging bot 做聊天機器人Introductions of Messaging bot 做聊天機器人
Introductions of Messaging bot 做聊天機器人
 
First meet with Android Auto
First meet with Android AutoFirst meet with Android Auto
First meet with Android Auto
 
Everything About Bluetooth (淺談藍牙 4.0) - Peripheral 篇
Everything About Bluetooth (淺談藍牙 4.0) - Peripheral 篇Everything About Bluetooth (淺談藍牙 4.0) - Peripheral 篇
Everything About Bluetooth (淺談藍牙 4.0) - Peripheral 篇
 
[MOPCON 2015] 談談行動裝置的 Accessibility
[MOPCON 2015] 談談行動裝置的 Accessibility[MOPCON 2015] 談談行動裝置的 Accessibility
[MOPCON 2015] 談談行動裝置的 Accessibility
 
Everything About Bluetooth (淺談藍牙 4.0) - Central 篇
Everything About Bluetooth (淺談藍牙 4.0) - Central 篇Everything About Bluetooth (淺談藍牙 4.0) - Central 篇
Everything About Bluetooth (淺談藍牙 4.0) - Central 篇
 
A Quick look at ANCS (Apple Notification Center Service)
A Quick look at ANCS (Apple Notification Center Service)A Quick look at ANCS (Apple Notification Center Service)
A Quick look at ANCS (Apple Notification Center Service)
 
uPresenter, the story.
uPresenter, the story.uPresenter, the story.
uPresenter, the story.
 
Android Wear Development
Android Wear DevelopmentAndroid Wear Development
Android Wear Development
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Dernier (20)

Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

Developing Google Glass