7
13-6 Android 初學特訓班 設定存取 SD 卡的權限 系統預設不能存取 SD 卡的資料,必須在 <AndroidManifest.xml> 檔中加入允許 存取 SD 卡的權限,其語法為: <uses-permission android:name="android.permission.READ_EXTERNAL_ STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_ STORAGE" /> 另外也要加入讓使用者取得執行時權限的程式碼。 13.1.4 範例:SD 卡音訊播放器 本範例是播放位於 SD 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本 功能,而且能列出歌曲清單供點播,上一首、下一首、播完單曲後會自動播下一 首,且結束最後一首後會回到第一首,循環不息。 第一次執行時會顯示對話方塊讓使用者進行授權,按 ALLOW 鈕就可取得授權。 螢幕下方會列出 SD 卡中歌曲清單,點按歌曲名稱就會播放該歌曲,且在上方顯 示歌曲名稱。六個按鈕功能依序為上一首、停止、播放、暫停、下一首、結束程式。 播完單曲後會自動播下一首,在第一首按 鈕會到最後一首,同理,在最後一 首按 鈕會到第一首。

13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

13-6

Android 初學特訓班

設定存取 SD 卡的權限

系統預設不能存取 SD 卡的資料,必須在 <AndroidManifest.xml> 檔中加入允許

存取 SD 卡的權限,其語法為:

<uses-permission android:name="android.permission.READ_EXTERNAL_ STORAGE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_ STORAGE" />

另外也要加入讓使用者取得執行時權限的程式碼。

13.1.4 範例:SD 卡音訊播放器

本範例是播放位於 SD 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

功能,而且能列出歌曲清單供點播,上一首、下一首、播完單曲後會自動播下一

首,且結束最後一首後會回到第一首,循環不息。

第一次執行時會顯示對話方塊讓使用者進行授權,按 ALLOW 鈕就可取得授權。

螢幕下方會列出 SD 卡中歌曲清單,點按歌曲名稱就會播放該歌曲,且在上方顯

示歌曲名稱。六個按鈕功能依序為上一首、停止、播放、暫停、下一首、結束程式。

播完單曲後會自動播下一首,在第一首按 鈕會到最後一首,同理,在最後一

首按 鈕會到第一首。

Page 2: 13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

13

13-7

多媒體應用

新增專案並完成版面配置

新增 <ExMusic01> 專案,<activity_main.xml> 版面配置檔完成如下:

ImageView:ID 為 imgPlay

ImageView:ID 為 imgStop

ImageView:ID 為 imgEnd

TextView:ID 為 txtMusic

ImageView:ID 為 imgNext

ListView:ID 為 lstMusic

ImageView:ID 為 imgPause

ImageView:ID 為 imgFront

TextView:ID 為 txtSong

<AndroidManifest.xml> 加入存取 SD 卡權限

必須在 <AndroidManifest.xml> 檔中加入允許存取 SD 卡的權限,加入後的

<AndroidManifest.xml> 檔為:

<ExMusic01/app/manifests/AndroidManifest.xml>

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.ehappy.exmusic01" >

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<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" >

⋯⋯⋯

Page 3: 13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

13-8

Android 初學特訓班

加入執行的程式碼

1. 整體變數宣告及 onCreate() 啟動程式碼:

<ExMusic01/app/java/套件名稱 /MainActivity.java>

略⋯

24 private MediaPlayer mediaplayer;

25 private final String SONGPATH=Environment.getExternalStorageDirectory().getPath() + "/";

26 //歌曲名稱

27 String[] songname=new String[] {"greensleeves", "mario", "songbird", "summersong", "tradewinds"};

28 //歌曲檔案

29 String[] songfile=new String[] {"greensleeves.mp3", "mario.mp3", "songbird.mp3", "summersong.mp3", "tradewinds.mp3"};

30 private int cListItem=0; //目前播放歌曲

31 private Boolean falgPause=false; //暫停旗標

32 private ArrayAdapter<String> adaSong;

33 @Override

34 protected void onCreate(Bundle savedInstanceState) {

略⋯

52 lstMusic.setOnItemClickListener(lstListener);

53 mediaplayer=new MediaPlayer();

54 adaSong=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, songname);

55 requestStoragePermission();

█ 24 宣告 MediaPlayer 整體變數,並在 53 列建立 MediaPlayer 物件。 █ 25 宣告 SONGPATH 常數儲存 SD 卡路徑,本範例的多媒體檔案置於

SD 卡,將此路徑加上多媒體檔案名稱就是多媒體檔案的實體路徑。 █ 27 宣告 songname 陣列儲存歌曲名稱,用於在 54 及 68 列 ListView 元

件中顯示歌曲清單。

█ 29 宣告 songfile 陣列儲存多媒體檔案名稱,SONGPATH 加上此陣列值就可取得多媒體檔案。

█ 55 檢查是否取得執行時授權。

2. 處理執行時授權的程式碼與 12.4.4 節「登入頁面」範例相同,程式說明可參

考 12.4.4 節。

Page 4: 13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

13

13-9

多媒體應用

續:<ExLogin/app/java/套件名稱 /MainActivity.java>

59 private void requestStoragePermission() {

60 if(Build.VERSION.SDK_INT >= 23) { //Androis 6.0 以上

61 //判斷是否已取得驗證

62 int hasPermission = checkSelfPermission(Manifest. permission.READ_EXTERNAL_STORAGE);

63 if(hasPermission != PackageManager. PERMISSION_GRANTED) { //未取得驗證

64 requestPermissions(new String[]{Manifest. permission.READ_EXTERNAL_STORAGE}, 1);

65 return;

66 }

67 }

68 lstMusic.setAdapter(adaSong); //已取得驗證

69 }

70

71 //requestPermissions 觸發的事件

72 @Override

73 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

74 if (requestCode == 1) {

75 if (grantResults[0] == PackageManager. PERMISSION_GRANTED) { //按 允許 鈕

76 lstMusic.setAdapter(adaSong);

77 } else {

78 Toast.makeText(this, "未取得權 限! ", Toast.LENGTH_SHORT).show();

79 finish(); //結束應用程式

80 }

81 } else {

82 super.onRequestPermissionsResult(requestCode, permissions, grantResults);

83 }

84 }

3. 按鈕及 ListView 監聽事件程式碼:

續:<ExMusic01/app/java/套件名稱 /MainActivity.java>

86 private ImageView.OnClickListener listener=new ImageView.OnClickListener() {

87 @Override

88 public void onClick(View v) {

Page 5: 13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

15-22

Android 初學特訓班

要特別注意的是有時指南針圖示不會出現,要顯示指南針圖示必須在地圖上用二

隻手指點觸再左右旋轉才會出現。

15.3.5 範例:設定 Google Maps 的顯示樣式、視點位罝

建立 Google Maps應用程式專案,預設以一般地圖模式顯示,縮放比例為 17,

顯示中心點為「台北 101」,顯示地圖縮放圖示、指南針。也可以從 樣式 下拉式

選單中選擇以一般地圖、混合地圖、衛星地圖或地形圖顯示。

景點 下拉式清單中可選擇顯示的地圖中心點,包括「台北 101」、 「日月潭」和「高

雄六合夜市」。

Page 6: 13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

15-23

15 Google Maps應用程式

新增 Google Maps 專案

新增 Google Maps Activity 型別專案 <ExGoogleMap02>。

更改應用程式名稱

將 Title 欄位由預設「Map」更改為應用程式名稱「ExGoogleMap02」。

完成 <activity_maps.xml> 版面配置

在 <activity_maps.xml> 中佈建兩個 TextView 元件顯示提示訊息分別為「景

點:」和「樣式:」,兩個 Spinner 下拉式清單選擇景點和地圖樣式,一個

SupportMapFragment 元件,元件名稱為「map」顯示地圖。

<ExGoogleMap02/app/res/layout/activity_maps.xml>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:map="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="com.ehappy.exgooglemap02.MapsActivity"

android:orientation="vertical">

Page 7: 13.1.4 範例:SD 卡音訊播放器epaper.gotop.com.tw/PDFSample/ACL052800.pdf · 13.1.4 範例:sd 卡音訊播放器 本範例是播放位於 sd 卡中音訊檔的播放軟體,不只有播放、暫停、停止等基本

15-24

Android 初學特訓班

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:orientation="horizontal">

<TextView

android:id="@+id/txtShow"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="景點:"

android:textColor="#0000FF"

android:textSize="12sp" />

<Spinner android:id="@+id/spnGeoPoint" android:layout_width="160dp"

android:layout_height="wrap_content" />

<TextView

android:id="@+id/txtMapType"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="樣式:"

android:textColor="#0000FF"

android:textSize="12sp" />

<Spinner android:id="@+id/spnMapType" android:layout_width="160dp"

android:layout_height="wrap_content" />

</LinearLayout>

<fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_margin="15dp" />

</LinearLayout>