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
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" >
⋯⋯⋯
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 節。
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) {
15-22
Android 初學特訓班
要特別注意的是有時指南針圖示不會出現,要顯示指南針圖示必須在地圖上用二
隻手指點觸再左右旋轉才會出現。
15.3.5 範例:設定 Google Maps 的顯示樣式、視點位罝
建立 Google Maps應用程式專案,預設以一般地圖模式顯示,縮放比例為 17,
顯示中心點為「台北 101」,顯示地圖縮放圖示、指南針。也可以從 樣式 下拉式
選單中選擇以一般地圖、混合地圖、衛星地圖或地形圖顯示。
景點 下拉式清單中可選擇顯示的地圖中心點,包括「台北 101」、 「日月潭」和「高
雄六合夜市」。
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">
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>
Top Related