安卓開發基礎介紹

引言

  • Android一詞的本義指「機器人」,同時也是Google於2007年11月5日宣佈的基於Linux平臺的開源手機操做系統的名稱,該平臺由 操做系統、中間件、用戶界面和應用軟件組成。中國大陸地區較多人使用「安卓」或「安致」。

圖片描述

  • Android旱期重大時間點html

    • 2003年10月,Andy Rubin等人建立Android公司,並組建Android團隊。
    • 2005年8月17日,Google低調收購了成立僅22個月的高科技企業Android及其團隊。
    • 2007年11月5日,開放手持設備聯盟(Open Handset Alliance)成立。
    • 2008年9月,谷歌正式發佈了Android 1.0系統,這也是Android系統最先的版本。
    • 2008年10月22日,第一款Android手機,HTC-G1上市。

圖片描述

安卓體系結構圖

系統構架分爲四層,從高到低分別是,(詳見下圖):java

  • Android應用層
  • Android應用框架層
  • Android系統運行層
  • Linux內核層

圖片描述

  1. 應用程序層

    該層提供一些核心應用程序包,例如電子郵件、短信、日曆、地圖、瀏覽器和聯繫人管理等。同時,開發者能夠利用Java語言設計和編寫屬於本身的應用程序,而這些程序與那些核心應用程序彼此平等、友好共處。android

  2. 應用程序框架層

    該層是Android應用開發的基礎,開發人員大部分狀況是在和它打交道。應用程序框架層包括活動管理器、窗口管理器、內容提供者、視圖系統、包管理器、電話管理器、資源管理器、位置管理器、通知管理器和XMPP服務十個部分。在Android平臺上,開發人員能夠徹底訪問核心應用程序所使用的API框架。而且,任何一個應用程序均可以發佈自身的功能模塊,而其餘應用程序則可使用這些已發佈的功能模塊。基於這樣的重用機制,用戶就能夠方便地替換平臺自己的各類應用程序組件。sql

  3. 系統庫和安卓運行時

    系統庫包括九個子系統,分別是圖層管理、媒體庫、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android運行時包括核心庫和Dalvik虛擬機,前者既兼容了大多數Java語言所須要調用的功能函數,又包括了Android的核心庫,好比android.os、android.net、android.media等等。後者是一種基於寄存器的java虛擬機,Dalvik虛擬機主要是完成對生命週期的管理、堆棧的管理、線程的管理、安全和異常的管理以及垃圾回收等重要功能。數據庫

  4. Linux內核

    Android核心系統服務依賴於Linux2.6內核,如安全性、內存管理、進程管理、網絡協議棧和驅動模型。Linux內核也是做爲硬件與軟件棧的抽象層。驅動:顯示驅動、攝像頭驅動、鍵盤驅動、WiFi驅動、Audio驅動、flash內存驅動、Binder(IPC)驅動、電源管理等。編程

安卓版本命名

版本命名一覽

API level Android版本 English Name 中文名 發佈日期
1 1 Astro Boy 阿童木 2008/9/23
2 1.1 Bender 發條機器人 2009/2/9
3 1.5 Cupcake 紙杯蛋糕 2009/4/27
4 1.6 Donut 甜甜圈 2009/9/19
5 - 7 2.0 - 2.1 Eclair 閃電泡芙 2009/10/26
8 2.2 Froyo 凍酸奶 2010/5/20
9 - 10 2.3 - 2.3.7 Gingerbread 薑餅 2010/12/6
11 - 13 3.0 - 3.2.6 Honeycomb 蜂巢 2011/2/22
14 - 15 4.0 - 4.0.4 Ice Cream Sandwich  冰激凌三明治 2011/10/18
16 - 18 4.1 - 4.3.1 Jelly Bean 糖豆 2012/7/9
19 - 20 4.4 - 4.4.4 KitKat 奇巧巧克力棒 2013/10/31
21 - 22 5.0 - 5.1.1 Lollipop 棒棒糖 2014/11/12
23 6.0 - 6.0.1 Marshmallow 棉花糖 2015/10/5
24 - 25 7.0 - 7.1.2 Nougat 牛軋糖 2016/8/22
26 - 27 8.0 - 8.1 Oreo 奧利奧 2017/8/21
28  9 Pie   

甜點命名

圖片描述

彩蛋

在安卓系統中,有很多內部工程師放進去的彩蛋。設置->關於手機->連續點擊"Android版本"
圖片描述數組

  • 安卓9.0 彩蛋

圖片描述

Android開發編程語言

  • Java : 官方開發語言

    對於世界各地的移動應用開發人員來講,首選的、也是最受歡迎的編程語言莫過於Java。它是Android應用開發的官方語言,Google不但能徹底支持它,並且Play Store中的大多數應用也都是用它來構建的。android-studio

  • Kotlin :第二官方開發語言

    和Java同樣,Kotlin也運行在Java虛擬機之上。它與Java具備徹底的互操做性,不會由於文件大小的增長,而形成障礙。瀏覽器

  • C/C++ : 原生開發(Native Development)

    Android Studio經過使用Android原生開發工具(Native Development)來支持C/C++。您沒必要編寫在Java虛擬機上運行的代碼,而可以將代碼在設備上本地原生地運行,而且能夠控制內存之類的部件。對於一些3D要求高的遊戲應用,您可使用C或C++編寫的庫,來獲取Android設備上的特有性能。緩存

  • C# :Unity遊戲引擎

    C#是純粹面向對象的C和C++版本。微軟保留了C++的強大功能和Visual BASIC的簡約性,它有點相似於Java的簡化版。和Java相同,C#也具備垃圾回收功能,所以您不須要擔憂內存泄漏、或考慮自行釋放內存等問題。同時相對於Java來講,C#的語法更爲清晰。
    Unity是一款「遊戲引擎」,它提供諸如物理計算、3D圖形渲染、以及相似Android Studio的IDE。它是一個開源的工具,您能很容易地建立出本身的遊戲,並能得到其強大社區的支持。只需幾行代碼,您就能夠在一小時以內搭建出一個基本的遊戲平臺。做爲Google Play Store裏大多數遊戲工做室所使用的工具,它是跨平臺的。因爲一直使用的是對象,其開發模式還能提供學習面向對象編程的實戰方法。

  • HTML+CSS+JS : PhoneGap跨平臺開發

    由Apache Cordova帶來的PhoneGap,容許您使用HTML、CSS和t這些經常使用於建立網站的編程語言。PhoneGap就像橋樑同樣,容許開發者訪問手機或平板電腦上的一些原生功能,如計算器或相機等。
    PhoneGap實際上不是真正的「Android」開發,而只是用到了t進行編程。所以它所完成的只是一些基本的任務,而若是您想成爲真正的Android應用開發者的話,仍是請從前面的列表中選擇語言吧。

開發環境搭建

Eclipse + ADT插件

  • Eclipse 是一個開放源代碼的、基於Java的可擴展開發平臺。就其自己而言,它只是一個框架和一組服務,用於經過插件組件構建開發環境。幸運的是,Eclipse 附帶了一個標準的插件集,包括Java開發工具(Java Development Kit,JDK)。咱們能夠經過在Eclipse中添加ADT(Android Development Tools)安卓開發工具,來搭建安卓開發環境。

    搭建步驟:
    1.安裝JDK
    2.配置Windows上JDK的變量環境

    1. 下載安裝Eclipse
4.下載安裝Android SDK 
      5.爲Eclipse安裝ADT插件

[Eclipse + ADT插件開發環境搭建教程](https://www.cnblogs.com/xiongwei/p/8042698.html)

Android studio

  • Android Studio 是谷歌推出的一個Android集成開發工具,基於IntelliJ IDEA. 相似 Eclipse ADT,Android Studio 提供了集成的 Android 開發工具用於開發和調試。

    在IDEA的基礎上,Android Studio 提供 :

    • 基於Gradle的構建支持
    • Android 專屬的重構和快速修復
    • 提示工具以捕獲性能、可用性、版本兼容性等問題
    • 支持ProGuard 和應用簽名
    • 基於模板的嚮導來生成經常使用的 Android 應用設計和組件
    • 功能強大的佈局編輯器,可讓你拖拉 UI 控件並進行效果預覽
  • Android Studio 方式搭建安卓開發環境極其簡單,無需配置環境變量,也不須要單獨安裝其它插件。首次啓動根據引導安裝安裝Android SDK,便可開始安卓開發。

    Android studio下載

圖片描述

搭建步驟:
      1. 下載 Android studio:經過上述連接,按照操做系統選擇下載版本。
      2. 運行android-studio\bin\studio.exe(64位系統運行studio64.exe)
      3. 首次啓動時,會有以下彈窗,如圖選擇不導入配置信息。

圖片描述

AIDE

  • AIDE是一個Android/Java集成開發環境,能夠在Android手機上進行Android軟件和遊戲的開發,而無需藉助PC。

圖片描述

AIDE是一個集成開發環境(IDE),可直接在Android設備上進行Android應用開發。AIDE支持完整的編程操做:其代碼編輯器功能豐富,如 一鍵 修補代碼,實時錯誤檢查,重構,智能搜索/跳轉代碼和運行編譯好的應用程序。

  AIDE將成爲一個真正的支持Android平板電腦鍵盤的開發工具。AIDE使用Ice Cream Sandwich(ICS)的Code Helper來檢查代碼。AIDE將Android手機變成了一個小型開發計算機,隨時隨地瀏覽和編輯代碼。
  AIDE徹底兼容Eclipse項目。只要將源碼複製到Android設備,用AIDE打開源碼目錄,加載項目,就能夠開始編程。

Hello world

建立HelloWorld應用程序

  • 啓動Android Studio

圖片描述

  • 新建項目

    • 新建項目中有多個項目模板,能夠選擇手機/平板、穿戴設備、安卓TV、車載設備,這裏選擇空項目。

圖片描述

+ 項目名稱、包名、支持最小版本號、開發語言。

圖片描述

工程文件結構簡述

  • Hello World項目文件以下,文件分爲3類:

    • java源碼
    • 資源文件
    • 配置文件(Android Manifest.xml)

圖片描述

源碼預覽

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
  • Activity是Android的核心類,也是安卓平臺重要組件。Activity至關於C/S程序的窗體(Form)或Web中的頁面。一個應用能夠由一個或多個Activity組成,Activity的間關係,取決於應用程序業務邏輯。

Activity窗體都是繼承Activity類,默認狀況下Activity是獨佔整個屏幕的,Activity中能夠有任意數量可視化組件(下文統稱控件),控件由View及其子類組成,控件按xml佈局文件控制外觀表現。

activity_main.xml(佈局文件)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Android Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hellowworld">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

程序運行調試

  • 安卓應用運行調試有兩種方式,分別是模擬器調試和實機調試。

模擬器調試

  • 模擬器指的是安卓模擬上,並不是真實的安卓設備上運行調試應用程序。Android SDK中有 AVD Manager(安卓虛擬設備管理器),能夠配置模擬出不一樣版本,不一樣尺寸,不一樣配置的安卓設備,但虛擬設備會佔用宿主主機資源,性能一般沒法模擬真實設備,並且涉及硬件設備如相機、陀螺儀時,沒法模擬真實狀況。模擬器調試須要先建立安卓虛擬設備。

圖片描述

實機調試

  • 在真實的安卓設備運行調試應用程序:經過USB鏈接安卓設備,並在測試安卓設備開啓「開發者模式」,方可調試。

簡單控件使用和事件響應

  • 添加一個Button:在佈局文件中根標籤添加
<Button
    android:id="@+id/my_button"
    ......
    android:text="@string/app_name"
     />
  • 在Activity中獲取按鈕:
Button myButton = findViewById(R.id.my_button);
  • 添加監聽器,響應監聽:
myButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this,"Button點擊",Toast.LENGTH_SHORT).show();
        Log.i("onclick","點擊");
    }
});

基本佈局方式

佈局示例代碼

  • Linear Layout(線性佈局)

    線性佈局在開發中使用最多,具備垂直方向與水平方向的佈局方式,經過設置屬性「android:orientation」控制方向,屬性值垂直(vertical)和水平(horizontal),默認水平方向。

  • RelativeLayout(相對佈局)

    相對佈局可讓子控件相對於兄弟控件或父控件進行佈局,能夠設置子控件相對於兄弟控件或父控件進行上下左右對齊。
    RelativeLayout能替換一些嵌套視圖,當咱們用LinearLayout來實現一個簡單的佈局但又使用了過多的嵌套時,就能夠考慮使用RelativeLayout從新佈局。
    相對佈局就是必定要加Id才能管理。

  • FrameLayout(幀佈局)

    幀佈局或叫層佈局,從屏幕左上角按照層次堆疊方式佈局,後面的控件覆蓋前面的控件。

該佈局在開發中設計地圖常常用到,由於是按層次方式佈局,咱們須要實現層面顯示的樣式時就能夠
採用這種佈局方式,好比咱們要實現一個相似百度地圖的佈局,咱們移動的標誌是在一個圖層的上面。
在普通功能的軟件設計中用得也很少。層佈局主要應用就是地圖方面。

  • AbsoluteLayout(絕對佈局)

    絕對佈局中將全部的子元素經過設置android:layout_x 和 android:layout_y屬性,將子元素的座標位置固定下來。由於Android終端通常機型比較多,各自的屏幕大小。分辨率等可能都不同,若是用絕對佈局,可能致使在有的終端上顯示不全等。

  • TableLayout(表格佈局)

    表格佈局,適用於多行多列的佈局格式,每一個TableLayout是由多個TableRow組成,一個TableRow就表示TableLayout中的每一行,這一行能夠由多個子元素組成。

  • GridLayout(網格佈局)

    android 4.0 後新增的一個佈局,與前面介紹過的TableLayout(表格佈局)其實有點大同小異,容器中的組件能夠跨多行也能夠跨多列。

  • ConstraintLayout(約束佈局)

    如今取代RelativeLayout成了建立空Activity的默認佈局,很是很是強大,操做很是簡潔。

安卓應用四大組件

  • Activity
  • Service
  • Broadcast Receiver
  • Content Provider

Activity

Activity 生命週期

圖片描述

onCreate()    這是第一個回調,在活動第一次建立時調用
onStart()    這個回調在活動爲用戶可見時被調用
onResume()    這個回調在應用程序與用戶開始可交互的時候調用
onPause()    被暫停的活動沒法接受用戶輸入,不能執行任何代碼。噹噹前活動將要被暫停,上一個活動將要被恢復是調用
onStop()    當活動不在可見時調用
onDestroy()    當活動被系統銷燬以前調用
onRestart()    當活動被中止之後從新打開時調用

一個程序搞懂生命週期

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "LifeCycleActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate called.");
    }
    //Activity建立或者從後臺從新回到前臺時被調用
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart called.");
    }

    //Activity從後臺從新回到前臺時被調用
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart called.");
    }

    //Activity建立或者從被覆蓋、後臺從新回到前臺時被調用
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume called.");
    }

    //Activity被覆蓋到下面或者鎖屏時被調用
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause called.");
        //有可能在執行完onPause或onStop後,系統資源緊張將Activity殺死,因此有必要在此保存持久數據
    }

    //退出當前Activity或者跳轉到新Activity時被調用
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop called.");
    }

    //退出當前Activity時被調用,調用以後Activity就結束了
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestory called.");
    }
}

Service

Service(服務)是一個一種能夠在後臺執行長時間運行操做而沒有用戶界面的應用組件。服務可由其餘應用組件啓動(如Activity),服務一旦被啓動將在後臺一直運行,即便啓動服務的組件(Activity)已銷燬也不受影響。 此外,組件能夠綁定到服務,以與之進行交互,甚至是執行進程間通訊 (IPC)。 例如,服務能夠處理網絡事務、播放音樂,執行文件 I/O 或與內容提供程序交互,而全部這一切都可在後臺進行。Service基本上分爲兩種形式:
  • 啓動狀態

    當應用組件(如 Activity)經過調用 startService() 啓動服務時,服務即處於「啓動」狀態。一旦啓動,服務便可在後臺無限期運行,即便啓動服務的組件已被銷燬也不受影響,除非手動調用才能中止服務, 已啓動的服務一般是執行單一操做,並且不會將結果返回給調用方。

  • 綁定狀態

    當應用組件經過調用 bindService() 綁定到服務時,服務即處於「綁定」狀態。綁定服務提供了一個客戶端-服務器接口,容許組件與服務進行交互、發送請求、獲取結果,甚至是利用進程間通訊 (IPC) 跨進程執行這些操做。 僅當與另外一個應用組件綁定時,綁定服務纔會運行。 多個組件能夠同時綁定到該服務,但所有取消綁定後,該服務即會被銷燬。

Service 生命週期

圖片描述

Broadcast Receiver

在Android中,廣播是一種普遍運用的在應用程序之間傳輸信息的機制。而廣播接收器是對發送出來的廣播進行過濾接受並響應的一類組件。可使用廣播接收器來讓應用對一個外部時間作出響應。例如,當電話呼入這個外部事件到來時,能夠利用廣播接收器進行處理。當下載一個程序成功完成時,仍然能夠利用廣播接收器進行處理。廣播接收器不NotificationManager來通知用戶這些事情發生了。廣播接收器既能夠在AndroidManifest.xml中註冊,也能夠在運行時的代碼中使用Context.registerReceive()進行註冊。只要是註冊了,當事件來臨時,即便程序沒有啓動,系統也在須要的時候啓動程序。各類應用還能夠經過使用Context.sendBroadcast()將它們本身的Intent廣播給其餘應用程序。

  • MyRecever.java
public class MyRecever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String msg=intent.getAction()+"\n";
        Log.i("s", msg);
        Toast.makeText(context, msg, Toast.LENGTH_LONG).show();    
    }
}
  • AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xyk.brocastereg"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:targetSdkVersion="24" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <receiver android:name=".MyRecever">
            <intent-filter>
                <action android:name="android.intent.action.TIME_TICK" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
        </receiver>        
    </application>
</manifest>
  • MianActivity.java
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MyRecever();
    }
}

Content Provider

內容提供者組件經過請求從一個應用程序向其餘的應用程序提供數據。這些請求由類 ContentResolver 的方法來處理。內容提供者可使用不一樣的方式來存儲數據。數據能夠被存放在數據庫,文件,甚至是網絡。有時候須要在應用程序之間共享數據。這時內容提供者變得很是有用。
圖片描述

圖片描述

Android 資源文件

圖片描述
圖片描述

資源文件列表

資源文件一般保存在res文件目錄下,res目錄下資源詳解以下:

  • res/animator : 屬性動畫的XML文件目錄, 屬性動畫就是定義起始結束, 動作, 重複時間等參數齊全的動畫;
  • res/anim : 補間動畫的XML文件目錄, 補間動畫是隻定義 起始 結束幀, 中間的動做由系統進行計算獲取動做過程;
  • res/color : 顏色列表的XML文件目錄;
  • res/drawable : 存放真實的位圖文件, 也能夠存放Drawable對象及子類對象的XML文件;
  • res/layout : 界面佈局文件目錄;
  • res/menu : 程序中使用的菜單文件目錄, 該文件下的XML文件能夠應用與 選項菜單, 子菜單, 上下文菜單等;
  • res/raw : 存放原生資源, 與assets目錄做用相同, 能夠經過調用openRawResource(int)方法獲取二進制輸入流, 與asstes類似, 使用AssetsManager訪問這些資源;
  • res/value : 存放 字符串. 整數, 顏色, 數組 信息的 XML文件的目錄, 這些XML文件資源的根元素是resource;
  • res/xml : 原生的XML文件, 可使用 Resource.getXML()方法進行訪問;

資源的使用

  • 在java文件中引用資源

    my_app.setText(R.string.app_name);
    setContentView(R.layout.activity_main);
  • 在xml文件中引用資源

    android:text="@string/app_name"

Activity間通訊和Intent

Android 數據存儲

  • SharedPreferences
  • SQLite
  • 文件存儲 (SD卡存儲)

SharedPreferences

  • SharedPreferences是Android平臺上一個輕量級的存儲輔助類,用來保存應用的一些經常使用配置,它提供了string,set,int,long,float,boolean六種數據類型。最終數據是以xml形式進行存儲。在應用中一般作一些簡單數據的持久化緩存。

    實現SharedPreferences存儲的步驟以下:

    1. 根據Context獲取SharedPreferences對象
    2. 利用edit()方法獲取Editor對象。
    3. 經過Editor對象存儲key-value鍵值對數據。
    4. 經過commit()方法提交數據。 

SQLite

  • SQLite是一款輕型的數據庫,是遵照ACID的關聯式數據庫管理系統,它佔用資源很是的低,在嵌入式設備中,可能只須要幾百K的內存就夠了。

    Android提供了建立和是用SQLite數據庫的API。SQLiteDatabase表明一個數據庫對象,提供了操做數據庫的一些方法。在Android的SDK目錄下有sqlite3工具,咱們能夠利用它建立數據庫、建立表和執行一些SQL語句。下面是SQLiteDatabase的經常使用方法。

文件存儲

  • 使用內部存儲

    Context提供了兩個方法來打開數據文件裏的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),這兩個方法第一個參數 用於指定文件名,第二個參數指定打開文件的模式。該方式存儲數據爲私有,其它應用沒法訪問,當應用卸載時,數據一併被刪除。

  • 使用外部存儲(sdcard)

    訪問外部存儲文件,須要申請讀/寫外部存儲權限經過IO訪問文件.

安卓權限 Permission

咱們在安裝Android軟件的時候,系統會提示該軟件所須要的權限,相對於其餘系統,android的權限很是多。咱們在開發軟件的時候,也須要聲明相應的權限,好比但願軟件能發短信,須要聲明軟件調用短信的權限,不然軟件運行的時候就會報錯。

    Android的權限在AndroidManifest.xml文件裏配置。AndroidManifest文件中有四個標籤與permission有關,它們分別是 <permission>、 <permission-group> 、<permission-tree> 和 <uses-permission>。其中最經常使用的是 <uses-permission>,當咱們須要獲取某個權限的時候就必須在咱們的manifest文件中聲明<uses-permission>。
  • 例如,短信和電話權限的定義:
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS"/>

危險權限

權限組 權限列表
android.permission-group.CALENDAR android.permission.READ_CALENDAR
(容許程序讀取用戶的日程信息)
android.permission-group.CAMERA android.permission.CAMERA
(容許訪問攝像頭進行拍照)
android.permission-group.CONTACTS android.permission.READ_CONTACTS
(容許應用訪問聯繫人通信錄信息)
android.permission.WRITE_CONTACTS
(寫入聯繫人,但不可讀取)
android.permission.GET_ACCOUNTS
(訪問GMail帳戶列表)
android.permission-group.LOCATION android.permission.ACCESS_COARSE_LOCATION
(經過WiFi或移動基站的方式獲取用戶錯略的經緯度信息,定位精度大概偏差在30~1500米)
android.permission.ACCESS_FINE_LOCATION
(經過GPS芯片接收衛星的定位信息,定位精度達10米之內)
android.permission-group.MICROPHONE android.permission.RECORD_AUDIO
(錄製聲音經過手機或耳機的麥克)
android.permission-group.PHONE android.permission.READ_PHONE_STATE
(訪問電話狀態)
android.permission.CALL_PHONE
(容許程序從非系統撥號器裏輸入電話號碼)
android.permission.READ_CALL_LOG
(容許應用程序讀取用戶的通話記錄)
android.permission.WRITE_CALL_LOG
(容許一個程序寫入(但不讀取)用戶的通話記錄資料)
com.android.voicemail.permission.ADD_VOICEMAIL
(容許應用程序添加語音郵件進入系統)
android.permission.USE_SIP
(容許程序使用SIP視頻服務)
android.permission.PROCESS_OUTGOING_CALLS
(容許程序監視,修改或放棄播出電話)
android.permission-group.SENSORS android.permission.BODY_SENSORS
(容許從傳感器,用戶使用來衡量什麼是他/她的身體內發生的事情,如心臟速率訪問數據的應用程序)
android.permission-group.SMS android.permission.SEND_SMS
(發送短信)
android.permission.RECEIVE_SMS
(接收短信)
android.permission.READ_SMS
(讀取短信內容)
android.permission.RECEIVE_WAP_PUSH
(接收WAP PUSH信息)
android.permission.RECEIVE_MMS
(接收彩信)
android.permission.READ_CELL_BROADCASTS
()
android.permission-group.STORAGE android.permission.READ_EXTERNAL_STORAGE
(容許程序讀取外部存儲,如SD卡讀文件)
android.permission.WRITE_EXTERNAL_STORAGE
(容許程序寫入外部存儲,如SD卡上寫文件)
相關文章
相關標籤/搜索