顯示具有 android 標籤的文章。 顯示所有文章
顯示具有 android 標籤的文章。 顯示所有文章

2014年7月28日 星期一

Android NDK setup in Eclipse.

網路上已經有太多文章教大家如何設定Eclipse裏面的NDK環境。

但是常常會發生一個狀況就是在Eclipse裏面找不到可以設定NDK路徑的地方。

本文即教大家如何讓NDK的選項出現,好設定NDK路徑。

網路上大家都說要在Eclipse \ Windows \ Preference \Android \ NDK 中設定路徑,但就是不知道什麼原因沒有出現上述的畫面,如下圖。

解決方式如下:
第一種 > 網路直接安裝:
1. 開啟 Eclipse \ Help \ Install New Software.
2. 在work with中設定

https://dl-ssl.google.com/android/eclipse/


3. 然後再按下旁邊的add,之後下方會出現一個可安裝的軟體列表。
4. 選擇所有軟體之後,進行下一步,逐步安裝。
5. 安裝完成之後,重新啟動Eclipse即可看見NDK選項。

第二種 > 下載到本機後安裝:
此種方法是上述的作法無法順利完成,可以採用第2種方法。
1. 先下載ADT到本機端。(下載後不需解壓縮)
2. 一樣開啟 Eclipse \ Help \ Install New Software.
3. 在work with中,先點選Add,會出現一個對話框。

4. 在對話框的Name裏面可以隨意填,只要自己認得即可。
5. 在對話框的Location選擇旁邊的Archive,然後選到第1步驟下載的檔案。
6. 接下來的步驟跟第一種方法的4, 5步驟相同。

完成之後,如同下圖。


2014年3月19日 星期三

adb device 無法發現裝置

前一陣子突然間手上的android device無法被ubuntu認識。
下了adb device指令一直沒有出現device裝置。

查了好幾個地方都沒有問題。
查看 /etc/udev/rules.d/99-android.rules也都正確。(參考資料)

最後同事教了一招。
在home目錄下有一個 .android 的目錄
裏面會有一個 adb_usb.ini 檔,請將 device 的 usb vendor id 加到此檔最後一行即可。
如何查詢device usb vendor id 請參考連結。


最後檔案會如下範例:
$ cat .android/adb_usb.ini 
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x0110

其中,0x0110就是查出來的usb vendor id.

重新啟動adb一次就可以了。
$ adb kill-server
$ adb devices


2014年2月13日 星期四

如何在eclipse下build有system權限的apk


以下為各位介紹如何在eclipse下build有system權限的apk. 並相關會遇到的問題。

當我們要寫一支system permission的apk時,需要在AndroidManifast.xml加入下面文字:
    android:sharedUserId="android.uid.system"
    < uses-permission android:name="android.permission.REBOOT" / >
    < uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" / >
    .....
然而,加入之後,會有一些狀況,描述如下:


1. eclipse build error:
在eclipse的perference中,有一些android的相關設定。
在Android\Lint Error Checking\ProtectedPermissions預設是error等級(詳如下圖),也就是說當eclipse檢查到某些被定義成system權限的字串時,會提示user error訊息。
這樣的機制導致於無法build這個apk.
如:< uses-permission android:name="android.permission.REBOOT" / > 就被判定為 error 等級

解決方式:
到preference中將ProtectedPermissions設成warning即可通過eclipse檢查。也可build出具system權限的apk.

2. adb install:
雖然#1經過修改eclipse裡面的設定可以避開檢查,成功build出apk。
但是adb install會因權限呼叫PackageManager檢查signature。結果會出現沒有signatures.

adb logcat如下:
E/PackageManager( 176): Package com.test.android.testreboot has no signatures that match those in shared user android.uid.system; ignoring!
adb install回應如下:
Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE


3. adb push:
既然adb install不成功,那改用adb push.
adb push雖然不會因權限檢查signature,但是android執行時會因權限檢查signatures,導致於下列error.
adb logcat如下:
E/PackageManager( 176): Package com.test.android.testreboot has no signatures that match those in shared user android.uid.system; ignoring!

#2跟#3的解決方式:
用相對應的platform key去sign過即可解決問題。
Sign key語法如下:
java -jar signapk.jar [pem certificate file of platform] [pk8 certificate file of platform] [origin.apk] [target.pak]
example:
java -jar signapk.jar platform.x509.pem platform.pk8 origin.apk target.pak


其他資訊#1:
如果沒有加上
android:sharedUserId="android.uid.system",
只有加
是可以build出apk,也可以用adb install方式安裝,但是runtime會出現下列錯誤訊息:

adb logcat如下:
E/AndroidRuntime( 1131): java.lang.SecurityException: Neither user 10048 nor current process has android.permission.REBOOT.


其他資訊#2:
eclipse的權限檢查不是檢查
    android:sharedUserId="android.uid.system"
而是檢查
    < uses-permission android:name="android.permission.REBOOT" / >
    < uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" / >
導致上述問題的,應該還有其他項目,目前沒有找到哪裡有詳細列出檢查的項目。


2013年12月19日 星期四

Eclipse cannot load SWT libraries

After installed eclipse in ubuntu 12.04. you may meet the following problem.

Eclipse cannot load SWT libraries

The log looks like belows.
 11         java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
 12         no swt-gtk-3740 in java.library.path
 13         no swt-gtk in java.library.path
 14         Can't load library: ~/.swt/lib/linux/x86_64/libswt-gtk-3740.so
 15         Can't load library: ~/.swt/lib/linux/x86_64/libswt-gtk.so

The solution is: 
echo "-Djava.library.path=/usr/lib/jni/" >> /etc/eclipse.ini




2013年1月14日 星期一

MVP in Android

一個簡單的介紹有關android如何實作MVP pattern.
An MVP Pattern for Android

實際範例,可以下載回來自己測試,了解MVP架構。(其中包含了 unit test 的使用)
mvp-hello-world


2012年9月25日 星期二

adb devices no permissions 的解決方法

使用adb devices 出现如下:
List of devices attached
???????????? no permissions

解决方法:
1. 找出usb vid,pid
$ lsusb      #列出usb device內容
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 003: ID 192f:0916 Avago Technologies, Pte.
Bus 003 Device 002: ID 0e8f:0022 GreenAsia Inc.
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 005: ID 18d1:4e26
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

只要插入usb device查乙次,拔出usb device查詢一次,比較差異就可以知道我們要的usb device是哪一個。
如:
Bus 003 Device 002: ID 0e8f:0022 GreenAsia Inc.
其中的0e8f就是vid,0022就是pid.

2. 編輯權限
$ sudo vim /etc/udev/rules.d/70-android.rules
加入以下內容
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e8f", ATTRS{idProduct}=="0022",MODE="0666" 

3. 重新啟動 udev service
$ sudo chmod a+rx /etc/udev/rules.d/70-android.rules 
$ sudo service udev restart 

4. 重新啟動 adb
$ sudo ./adb kill-server 
$ ./adb devices

完成

2012年4月25日 星期三

android default luncher 決定流程

今天介紹一下Android如何決定使用哪一個luncher的。
我們在market上可以下載很多不同廠商製作的luncher,那當我們的luncher超過一個時,Android如何決定要使用哪一個luncher?

基本上Android system會先查看有多少luncher被安裝了,如果多於一個時,Android會再查看是否有default的luncher設定,如果有的話,優先使用deault luncher,如果沒有的話,會跳一個視窗讓使用者選擇要使用的luncher,同時也可以選擇將這個luncher設成預設。整個流程如下。

那如果已經設定一組default的luncher之後,如何變更呢?
只要到 [設定] / [應用程式] / [管理的應用程式] / [全部] 頁面,點選目前預設的luncher,然後點擊 [清除預設值],然後按 [Home] 時即會出現可以選擇luncher的視窗了。

2012年4月24日 星期二

Linux 環境下如何擷取Android畫面

開發Android難免會需要擷取Adnroid的畫面,不管是開發前期,開發中,或是最後製作說明文件。
提供幾個方法可以擷取Android畫面的方式:
1. 最困難,也最簡單的方法:最困難是使用前要安裝一堆環境,但是最後最容易使用。本方法適用於一般app的開發者。
就是透過eclipse裏面的ddms直接擷取畫面。
2. 有點簡單的方法:
如果你已經有build好的Android source tree的話,在out/host/linux-x86/bin目錄下執行 ./ddms會呼叫ddms的UI介面,然後選擇Menu中的device -> capture screen 就可以了。
3. 最簡單的方式:
這跟#2一樣,適用於已經有build好的Android source tree的使用者,直接到out/host/linux-x86/bin目錄下執行 ./screenshot2 -d {要存的檔名}即可。

2012年4月23日 星期一

ANDROID_SWT問題


在Linux環境下執行ddms時有時候會出現
SWT folder '/XXXX/android/out/host/linux-x86/framework/x86' does not exist.
Please export ANDROID_SWT to point to the folder containing swt.jar for your platform.
這是因為swt.jar找不到。

很簡單的方法可以解決:
先用 locate swt.jar 找到哪裡有swt.jar.
然後直接 export ANDROID_SWT={找到的路徑}
就可以正常使用了。

2011年12月29日 星期四

如何設定android開發環境

這裡來介紹一下如何設定android的開發環境。
我們分為幾個階段:
1. linux基本環境設定
2. android apk 開發環境設定
3. android os 開發環境設定

首先,linux環境設定:

1. 安裝 ubuntu version 10.04 LTS 64bit (以下是以ubuntu來舉例說明)
1.1. 設定 eth0.
1.2. 設定 samba service. (這個是為了方便與windows共享檔案用)
參考資料: http://ithelp.ithome.com.tw/question/10027945
1.3. 最好執行 system / administration / update manager 將系統更新到最新.
2. 安裝瀏覽器 google chrome. (也可以用內建的firefox)
下載位置: https://www.google.com/chrome?hl=zh-TW
3. 安裝 ssh (方便用其他電腦連線進去作業)
參考資料: http://twntwn.info/blog/ajer001/archives/2822
安裝指令: sudo apt-get install ssh
4. 安裝中文輸入法 gcin.
參考資料: http://cle.linux.org.tw/trac/wiki/GcinInstallUbuntu


接下來,安裝 android apk 開發環境:

參考資料: http://developer.android.com/sdk/requirements.html

1. 安裝 jdk 6 (non-rpm version for ubuntu)
參考資料: http://source.android.com/source/initializing.html
安裝指令: sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
安裝指令: sudo apt-get update
安裝指令: sudo apt-get install sun-java6-jdk
2. 安裝 eclipse
下載位置: http://www.eclipse.org/downloads/
3. 安裝 android sdk
參考資料: http://developer.android.com/sdk/installing.html
4. 安裝 android adt from eclipse.
參考資料: http://developer.android.com/sdk/eclipse-adt.html
5. 安裝相關 android sdk 元件.
5.1. 設定 android sdk folder for eclipse.
5.2. 啟動 android sdk manager and download necessary components.
6. 安裝 android ndk (非必要步驟)
參考資料: http://developer.android.com/sdk/ndk/index.html


最後,安裝 android os 開發環境

1. 安裝必要元件.
參考資料: http://source.android.com/source/initializing.html    (key word: "Installing required packages")
安裝指令: sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
安裝指令: sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
安裝指令: sudo apt-get install sharutils    //for uudecode

2. 設定 USB Access 權限
參考資料: http://source.android.com/source/initializing.html (key word: "Configuring USB Access")
安裝指令: sudo vim /etc/udev/rules.d/51-android.rules
add following lines:
----------------------------------------------------------
SUBSYSTEM=="usb", SYSFS{idVendor}=="vendor id here", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="vendor id here", OWNER="user name here" GROUP="group name here"
----------------------------------------------------------
!!NOTE: This is known to work on both Ubuntu Hardy Heron (8.04.x LTS) and Lucid Lynx (10.04.x LTS).

3. 設定 ccache (加快 build image 速度)
參考資料: http://source.android.com/source/initializing.html (key word: "Setting up ccache")
安裝指令: mkdir ~/data/ccache
安裝指令: vim ~/.bashrc
add following lines at end of file:
----------------------------------------------------------
export USE_CCACHE=1
export CCACHE_DIR=~/data/ccache
----------------------------------------------------------

4. 設定開啟檔案最大值
安裝指令: sudo vim /etc/security/limits.conf
add following lines at end of file:
----------------------------------------------------------
user_name_here      -       nofile          4096
root             -       nofile          4096
----------------------------------------------------------




其他實用的設定
1. format history command:
安裝指令: vim ~/.bashrc
add following line at end of file:
----------------------------------------------------------
export HISTTIMEFORMAT="%F %T "
----------------------------------------------------------

2. format vim editor
安裝指令: vim ~/.vimrc
add following lines
----------------------------------------------------------
set hlsearch            "高亮度反白
set backspace=2         "可隨時用倒退鍵刪除
set autoindent          "自動縮排
set ruler               "可顯示最後一行的狀態
set showmode            "左下角那一行的狀態
set nu                  "可以在每一行的最前面顯示行號啦!
set bg=dark             "顯示不同的底色色調
syntax on               "進行語法檢驗,顏色顯示。
----------------------------------------------------------

2011年11月18日 星期五

android CTS 介紹---cts plan 包含哪些東西

1. CTS從大到小包含了
Plan > package > suite > case > method


Plan:
User can create plan in cts shell. Plan should include packages, suites, cases or methods. Picture below shows the “add plan” command.

  • Cts test plan comes from [android source tree]/out/host/linux-x86/repository/plans/[xml file];
  • User can also create cts plan by adding xml file manually, without cts shell. This means when user types command “ls --plan”, cts shell search xml immediately.
  • Cts shell will check contents in plan when processing user command, following picture shows the error message for the item.
Package:
  • Package comes from [android source tree]/out/host/linux-x86/repository/plans/*.xml
  • Each package should responds to one xml and one apk file in [android source tree]/out/host/linux-x86/repository/testcase/. (but some package don’t.)
Suite:
  • Following picture shows the xml structure. It show the relationship between suite, TestCase(Case) and Test(Method).
  • And picture below shows the source code for corresponded class method.
  • We can find Suite in each xml file in [android source tree]/out/host/linux-x86/repository/testcase/*.xml.

Case:
  • It corresponds to class name in java file.
  • Test case is recorded in xml as suite child node. We can find them in source code as a class name.

Method:
  • Method is recorded in xml as TestCase child node. We can find them in source code as a class method.


android CTS 介紹---運作方式

需要設備.

  • Host side: PC with linux OS or windows OS.
  • Client side: tablet.

運作流程.

  • When cts start on host pc. Host pc will install test apk to tablet via adb.
  • After installing, tablet will start apk to test. And send result to host pc.
  • Host pc send adb command to remove apk on tablet.
  • Host pc gathers result information and generates xml report.

2011年10月3日 星期一

如何建立android unit test專案

前置作業:
1. 先建立要被測試的專案,假設要被測試的專案是com.myCompany.myHello.要被測試的class是MyHelloActivity.


2. 開始建立unit test project

步驟:
1. 在Eclipse 裡開新專案, new > project > Android > Android test Project.


2. 設定值如下說明
2.1. 假設test專案名稱為myTestProject.
2.2. 被測試專案為myHello.


3. 完成之後,會在eclipse的package explorer出現一個test專案,如下:


4. 接著新增加一個test case class,如下圖。
為什麼要用ActivityInstrumentationTestCase2,原文解釋:Android offers several, but the one that tests in the most realistic environment is ActivityInstrumentationTestCase2, so you will use it as the base class. Like all activity test case classes, ActivityInstrumentationTestCase2 offers convenience methods for interacting directly with the UI of the application under test.


5. 完成之後eclipse自動generate出一個myTestClass.java檔,請加入
import com.myCompany.MyHelloActivity;
並MyTestClass的建構子,如下:

這裡的”com.myCompany”指的是package name.,也就是告訴super class說,我要使用com.myCompany的MyHelloActivity的class.

6. 加入setUp() function,這個function是整個test project在開始test 程序之前會先被呼叫的,在這裡需要先確保需要使用到的變數都先被初始化。

在setUp()裡,也許你需要加上
setActivityInitialTouchMode(false);
如果在你的test procedure裡有送出一些key events,一定要將touch mode設定成off。如果沒有用到key events,可以不管這一行。

7. 加入preconditions() function,這個function是用來做前置測試用,先確保等一下要被呼叫的test functions裡面用到的變數,物件都是有用的資訊。跟setUp()作用很相似,Android development help裡面提到,preconditions只會被呼叫一次,但是setUp是每一個test function被呼叫之前都會先被執行一次。


8. 原文補充:The purpose of testing initial conditions is not the same as using setUp(). The JUnit setUp() runs once before each test method, and its purpose is to create a clean test environment. The initial conditions test runs once, and its purpose is to verify that the application under test is ready to be tested.

10. 最後加入要測試的functions,根據測試結果只要是test開頭的function都會被執行。


11. 執行unit test


12. 範例原始碼


13. 執行結果,如下圖。
根據這樣的資訊,我們可以知道在每個test procedure被執行之前,都會先呼叫setUp(),所以我們應該將變數的初始化放在這個地方。Android development裡面提到testPreconditions只會被執行一次,但是系統執行test開頭的的順序似乎是以function name的ascii順序來執行的。


14. 參考來源:
Android develop: http://developer.android.com/resources/tutorials/testing/helloandroid_test.html

2011年9月29日 星期四

[Android App] 緊急電話簿 v1.5

終於改版了,這次也算是大翻修,增加了交通運輸的服務電話,在經過一些思考之後,交通服務電話應該是比較會被大家用到的,也希望大家在緊急的時候都能得到協助。
趕緊來介紹一下新版本功能吧!


緊急電話簿更新 v1.5 版本了。
新的版本修改部分如下:

[修改部分]:

1. 修正永豐銀行、新光銀行服務電話。
2. 加大字體大小。
3. 自動辨識螢幕大小適時旋轉,提供更方便的操作介面。


[新增部分]:

增加交通運輸公司服務電話,有:

鐵路部分:高鐵、台鐵、台北捷運、高雄捷運。

航空部分:桃園機場、松山機場、高雄小港機場、中華航空、立榮航空、長榮航空、華信航空、復興航空、遠東航空、德安航空。

國道客運部分:三重客運、國光客運、日統客運、台中客運、和欣客運、統聯客運、阿羅哈客運、新竹客運。


相關連結
程式下載:Android Market 連結
[Android App] 緊急電話簿 v1.2
[Android App] 緊急電話簿




希望,這份資料可以提供給大家必要時的幫助。

2011年6月13日 星期一

Android Porting 問題(三)

根據 google 文件,開始 build 之後,突然之間出現了以下錯誤訊息。
『GL/glx.h : No such file or directory』


看起來應該是找不到 glx 的問題。
請安裝下列  package

sudo apt-get install libgl1-mesa-dev
再重新 build 乙次就可以啦!

Android Porting 問題(二)

一旦開始 build 就會發生一大堆問題,接下來就是見招拆招了!

我遇到的第二個問題是
『/usr/bin/ld: cannot find -lncurses』

目前可以將他歸類為
 cannot find -lxxxx 錯誤類別。
其中xxxx為類別名稱

解決方式:直接安裝缺少的module.
如
sudo apt-get install libncurses-dev

網路參考資料

Android Porting 問題(一)

根據 google 文件,開始 build 之後,突然之間出現了以下錯誤訊息。
『X11/Xlib.h : No such file or directory』


看起來應該是找不到 xlib 的問題。
請安裝下列  package



sudo apt-get install x11proto-core-dev
sudo apt-get install libx11-dev

再重新 build 乙次就可以啦!



2011年4月14日 星期四

[Android App] 緊急電話簿 v1.2

緊急電話簿更新 v1.2 版本了。
新的版本修改部分如下:

[修改部分]:
修正 1999 為全台各縣市政府通用的服務電話。

[新增部分]:
增加了兒童燙傷基金會、失蹤兒童通報、失蹤老人通報、平交道緊急事故通報、台電客服、警廣路況通報、高速公路拖吊申訴、國稅局。

並台灣電信業者服務電話:有中華電信、台灣大哥大、遠傳、威寶、亞太等。
另外,也增加各大壽險業者保戶免費服務電話:台灣人壽、南山人壽、保德信人壽、保誠人壽、紐約人壽、國泰人壽、富邦人壽等等。

產物保險部分加入:國泰產物保險、富邦產物保險、華南產物保險、新安東京產物保險、蘇黎世產物保險等等。(車禍受傷時很重要)

同時將原本只有3個分頁的電話增加到5個分頁!
新版縮圖如下:





前一版本介紹連結[Android App] 緊急電話簿



希望,這份資料可以提供給大家必要時的幫助。

2011年4月7日 星期四

如何動態設定 height in tablerow

Android 程式開發中用 TableRow 來製作 UI 是一個不錯的選擇。
只是要好好研讀 API 就是了。

在開發中,有一個問題一值無法解決。就是動態設定 TableRow 的 Height.

原始碼如下:

TableLayout table = new TableLayout(this);
table.setBackgroundResource(R.drawable.bg);
table.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));


TableRow.LayoutParams lp_tr = new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1);


TableRow tr = new TableRow(this);
table.addView(tr);
tr.setLayoutParams(lp_tr);


tr.setGravity(Gravity.BOTTOM);


Resources res = getResources();
Bitmap bmp = null;


LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);


bmp = BitmapFactory.decodeResource(res, R.drawable.XX);
ImageView v1 = new ImageView(this);
v1.setImageBitmap(bmp);
tr.addView(v1);


HorizontalScrollView scrollview = new HorizontalScrollView(this);
scrollview.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1));
scrollview.addView(table);
this.setContentView(scrollview);


其中,黃色的部份很重要(先後順序),要先 AddView 再設定 LayoutParams 不然,會白費工夫!

2011年3月24日 星期四

[Android App] 緊急電話簿

Android確實是一股不可忽視的潮流,所以最近也趕趕時髦,來開始寫一些 Android 的小程式。
恰巧,最近日本發生9.0的大地震,一股腦聯想到災難來臨了。想到這裡就聯想到:手機到底在沒有sim卡時是要打112還是113求救?
對於記憶力不太好的我,這時就需要碰碰運氣了。
有鑒於此,就想說:做一個小程式來幫助自己記住這些資訊!於是,緊急電話簿就誕生了!先來介紹他吧。

小檔案
中文姓名緊急電話簿
英文姓名Emergency Call
生日2011/3/16
血型Android 1.6
所在地Android Market 前去看看
自我介紹
緊急電話簿收錄了在台灣不常用但是緊急時不能沒有的電話。
如:家暴專線、張老師專線、反詐騙專線等等。
政府提供很多便利專線,但是太多反而記不住,現在可以利用智慧型手機的功能,幫助我們記住這些資訊,需要的時候就不用擔心了!
如有這些資料有『更新』或是『需要新增加』的緊急聯絡電話,請直接線上回報,我們將儘快更新版本。
生活照
祝福大家都有平平安安的一天!