日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何在Android上開發(fā)屬于自己的定制化啟動器

【譯文】我們要開發(fā)的就是這樣一套方案。

創(chuàng)新互聯(lián)從2013年開始,先為寶山等服務(wù)建站,寶山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為寶山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

介紹

從最基本的概念角度來講,啟動器其實應(yīng)該是一款能夠?qū)崿F(xiàn)以下功能的應(yīng)用程序:

  • 它代表著一臺設(shè)備的主屏幕。
  • 它能夠列出并啟動已經(jīng)安裝在該設(shè)備當(dāng)中的應(yīng)用程序。

換句話來說,它就是那款用戶按下home按鈕后所顯示的應(yīng)用程序。除非大家已經(jīng)安裝了定制化啟動器,否則我們目前正在使用的應(yīng)該都是Android系統(tǒng)自帶的默認(rèn)啟動方案。不少設(shè)備制造商都會在產(chǎn)品中默認(rèn)使用由其定制的啟動器,從而確保我們獲得與廠商預(yù)期相符的外觀效果與使用感受,例如三星TouchWiz以及HTC Sense。

在今天的教程中,我們將利用基本用戶界面創(chuàng)建出一款簡單的啟動器,它將由兩部分屏幕構(gòu)成:

  • 在主屏幕中顯示的是該設(shè)備的墻紙圖案。
  • 另一屏幕中顯示的是已經(jīng)安裝在設(shè)備當(dāng)中的應(yīng)用程序圖標(biāo)及其它細(xì)節(jié)信息。

1.要求

大家需要在自己的開發(fā)設(shè)備上預(yù)先安裝并配置好以下項目:

  • Android SDK以及平臺工具
  • Eclipse IDE 3.7.2或者更高版本,同時具備ADT插件
  • 運行有Android 2.2或者更高版本的模擬器或者Android設(shè)備

大家可以點擊此處通過Android開發(fā)者門戶下載對應(yīng)SDK及平臺工具。

2.項目設(shè)置

首先我們需要啟動Eclipse并創(chuàng)建一個新的Android應(yīng)用程序項目。我為這個應(yīng)用取了個非常直白的名稱——SimpleLauncher,當(dāng)然大家也可以自由選擇自己想要的名稱。請確保軟件包名稱沒有與其它項目出現(xiàn)重復(fù)。我們的啟動器所能支持的***SDK版本為“凍酸奶”,而主要的面向版本則為“果凍豆”。

由于我們不打算創(chuàng)建Activity,因此取消“Create Activity”勾選項,然后點擊“Finish”以繼續(xù)。

3.項目清單

接下來我們需要通過添加兩個activity對AndroidManifest.xml文件進(jìn)行修改。***個Activity用于顯示主屏幕,我們?nèi)缦滤緦⑵涿麨镠omeActivity。

 
 
 
 
  1.     android:name="ah.hathi.simplelauncher.HomeActivity"
  2.     android:label="Simple Launcher Home"
  3. android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"
  4.     android:launchMode="singleTask"
  5.     android:stateNotNeeded="true"
  6.     >
  7.     
  8.       
  9.       
  10.       
  11.             

通過將android.intent.category.HOME與android.intent.category.DEFAULT兩個類添加至intent-filter組當(dāng)中,相關(guān)Activity得以擁有與啟動器概念相符的運行方式。當(dāng)大家按下設(shè)備上的home按鈕時,其還將作為選項方案顯示出來。

我們還需要將launchMode設(shè)置到singleTask當(dāng)中,從而確保無論何時都只有單一Activity實例由系統(tǒng)負(fù)責(zé)運行。要顯示用戶的墻紙圖案,大家必須將主題設(shè)置為Theme.Wallpaper.NoTitleBar.FullScreen。

我們需要添加的第二個Activity負(fù)責(zé)顯示已經(jīng)安裝在用戶設(shè)備中的應(yīng)用程序條目。它還有另一項任務(wù),即啟動這些應(yīng)用程序。我們不需要對該Activity進(jìn)行任何特殊配置,將其命名為AppsListActivity即可。

 
 
 
 
  1.     android:name="ah.hathi.simplelauncher.AppsListActivity"
  2.     android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
  3.     >           

4.Activity布局

下面在項目的res/layout文件夾中為HomeActivity類創(chuàng)建一個XML文件,并將其命名為activity_home.xml。該布局擁有一個單獨的Button用以響應(yīng)點觸事件。點觸該按鈕能夠讓用戶由主屏幕切換至應(yīng)用程序列表。

 
 
 
 
  1.     xmlns:tools="http://schemas.android.com/tools"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     tools:context=".HomeActivity" >
  5.     
  6.         android:id="@+id/apps_button"
  7.         android:layout_width="wrap_content"
  8.         android:layout_height="wrap_content"
  9.         android:layout_alignParentRight="true"
  10.         android:layout_alignParentTop="true"
  11.         android:layout_marginRight="10dp"
  12.         android:layout_marginTop="10dp"
  13.         android:text="Show Apps"
  14.         android:onClick="showApps"
  15.         />

接下來,在項目的res/layout文件夾中為AppsListActivity類創(chuàng)建一個XML文件并將其命名為activity_apps_list.xml。該布局當(dāng)中包含一個占據(jù)整個屏幕的ListView。

 
 
 
 
  1.     android:layout_width="match_parent"
  2.     android:layout_height="match_parent"
  3.     android:orientation="vertical" >
  4.     
  5.         android:id="@+id/apps_list"
  6.         android:layout_width="match_parent"
  7.         android:layout_height="match_parent"
  8.         >       
  9.        

***,在同樣的位置創(chuàng)建第三個XML文件并將其命名為list_item.xml。該文件用于定義ListView當(dāng)中各個條目的布局方案。列表視圖中的每個條目都代表著已經(jīng)安裝在用戶設(shè)備上的一款應(yīng)用程序。它能夠顯示該應(yīng)用程序的圖標(biāo)、標(biāo)簽以及軟件包名稱。我們可以利用ImageView實例來顯示該應(yīng)用的圖標(biāo),并通過TextView實例顯示標(biāo)簽與軟件包名稱。

 
 
 
 
  1.     android:layout_width="match_parent"
  2.     android:layout_height="match_parent"
  3.     android:padding="10dp"
  4.     >
  5.     
  6.         android:id="@+id/item_app_icon"
  7.         android:layout_width="wrap_content"
  8.         android:layout_height="wrap_content"
  9.         android:layout_alignParentLeft="true"
  10.         android:layout_centerVertical="true"       
  11.         />
  12.     
  13.         android:id="@+id/item_app_label"
  14.         android:layout_width="wrap_content"
  15.         android:layout_height="wrap_content"
  16.         android:layout_toRightOf="@+id/item_app_icon"
  17.         android:paddingLeft="10dp"
  18.         />
  19.     
  20.         android:id="@+id/item_app_name"
  21.         android:layout_width="wrap_content"
  22.         android:layout_height="wrap_content"
  23.         android:layout_below="@+id/item_app_label"
  24.         android:layout_toRightOf="@+id/item_app_icon"
  25.         android:paddingLeft="10dp"
  26.         />

5.創(chuàng)建Acitivity類

HomeActivity

應(yīng)用程序的布局方案創(chuàng)建完成之后,現(xiàn)在要做的是創(chuàng)建兩個Activity類。當(dāng)創(chuàng)建這兩個類時,請確保每個類的名稱都與我們之前在項目清單文件中所指定的內(nèi)容相匹配。

創(chuàng)建一個名為HomeActivity的新類,然后將android.app.Activity設(shè)置為其超類。

 
 
 
 
  1. package ah.hathi.simplelauncher;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. public class HomeActivity extends Activity {
  7.     @Override
  8.     protected void onCreate(Bundle savedInstanceState) {
  9.         super.onCreate(savedInstanceState);
  10.         setContentView(R.layout.activity_home);
  11.     }
  12.     public void showApps(View v){
  13.         Intent i = new Intent(this, AppsListActivity.class);
  14.         startActivity(i);
  15.     }
  16. }

在該類的onCreate方法中,我們調(diào)用setContentView并將其傳遞至之前已經(jīng)創(chuàng)建完成的布局當(dāng)中。大家可能還記得,我們曾為activity_home布局添加過一個按鈕,用于觸發(fā)名為showApps的方法。現(xiàn)在我們要做的是將該方法引入HomeActivity類當(dāng)中。整個添加過程非常簡單,各位需要做的只是為AppsListActivity類創(chuàng)建一個Intent并付諸運行。

#p#

AppsListActivity

創(chuàng)建另一個名為AppsListActivity的Activity類,而后將android.app.Activity設(shè)置為其超類。在該類的onCreate方法當(dāng)中,我們調(diào)用setContentView并將其傳遞至此前已經(jīng)創(chuàng)建完成的activity_apps_list布局當(dāng)中。

 
 
 
 
  1. package ah.hathi.simplelauncher;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. public class AppsListActivity extends Activity {
  7.     @Override
  8.     protected void onCreate(Bundle savedInstanceState) {   
  9.         super.onCreate(savedInstanceState);
  10.         setContentView(R.layout.activity_apps_list);
  11.     }
  12. }

雖然我們的啟動器方案還沒有最終完成,但到這里大家已經(jīng)可以保存現(xiàn)有內(nèi)容并借此啟動自己設(shè)備上的應(yīng)用程序了。當(dāng)各位按下設(shè)備上的home按鈕時,系統(tǒng)會能夠彈窗詢問我們希望使用哪種啟動器方案。

如果大家選擇了Simple Launcher Home,則可以看到自己創(chuàng)建的全新主屏幕,其右上屏幕位置還配備一個按鈕。大家還能看到自己設(shè)備上原本設(shè)定的墻紙圖案。

現(xiàn)在回到Eclipse并創(chuàng)建一個名為AppDetail的類,其中將包含與應(yīng)用程序相關(guān)的細(xì)節(jié)信息、軟件包名稱、標(biāo)簽以及應(yīng)用程序圖標(biāo)。該界面非?;A(chǔ),大家可以利用如下代碼實現(xiàn):

 
 
 
 
  1. package ah.hathi.simplelauncher;
  2. import android.graphics.drawable.Drawable;
  3. public class AppDetail {
  4.         CharSequence label;
  5.         CharSequence name;
  6.         Drawable icon;
  7. }

6.獲取應(yīng)用程序

在AppsListActivity類的loadApps方法當(dāng)中,我們可以使用PackageManager類的queryIntentActivities方法以獲取Intent.CATEGORY_LAUNCHER類別當(dāng)中的所有Intents。該查詢能夠返回一份列表,其中包含全部能夠經(jīng)由啟動器實現(xiàn)啟動的應(yīng)用程序。我們可以將查詢返回結(jié)果中的每個條目添加到名為apps的列表當(dāng)中。大家可以通過以下代碼片段進(jìn)一步了解其效果。

 
 
 
 
  1. private PackageManager manager;
  2. private List apps;
  3. private void loadApps(){
  4.     manager = getPackageManager();
  5.     apps = new ArrayList();
  6.     Intent i = new Intent(Intent.ACTION_MAIN, null);
  7.     i.addCategory(Intent.CATEGORY_LAUNCHER);
  8.     List availableActivities = manager.queryIntentActivities(i, 0);
  9.     for(ResolveInfo ri:availableActivities){
  10.         AppDetail app = new AppDetail();
  11.         app.label = ri.loadLabel(manager);
  12.         app.name = ri.activityInfo.packageName;
  13.         app.icon = ri.activityInfo.loadIcon(manager);
  14.         apps.add(app);
  15.     }
  16. }

7.顯示應(yīng)用程序列表

由于apps變量當(dāng)中包含有我們所需要的全部細(xì)節(jié)信息,因此大家可以利用ListView類顯示出完整的應(yīng)用程序列表。我們首先創(chuàng)建一個簡單的ArrayAdapter并覆蓋其getView方法以獲取列表中的條目信息。接下來,將該ListView與適配器相關(guān)聯(lián)。

 
 
 
 
  1. private ListView list;   
  2. private void loadListView(){
  3.     list = (ListView)findViewById(R.id.apps_list);
  4.     ArrayAdapter adapter = new ArrayAdapter(this,
  5.             R.layout.list_item,
  6.             apps) {
  7.         @Override
  8.         public View getView(int position, View convertView, ViewGroup parent) {
  9.             if(convertView == null){
  10.                 convertView = getLayoutInflater().inflate(R.layout.list_item, null);
  11.             }
  12.             ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon);
  13.             appIcon.setImageDrawable(apps.get(position).icon);
  14.             TextView appLabel = (TextView)convertView.findViewById(R.id.item_app_label);
  15.             appLabel.setText(apps.get(position).label);
  16.             TextView appName = (TextView)convertView.findViewById(R.id.item_app_name);
  17.             appName.setText(apps.get(position).name);
  18.             return convertView;
  19.         }
  20.     };
  21.     list.setAdapter(adapter);          
  22. }

8.偵聽點觸操作

當(dāng)用戶點觸ListView當(dāng)中的某個條目時,我們的啟動器應(yīng)該能夠運行相應(yīng)的應(yīng)用程序。我們可以通過PackageManager類中的getLaunchIntentForPackage方法來創(chuàng)建一個Intent,用于指定我們要啟動哪款應(yīng)用程序。請大家查看以下代碼片段。

 
 
 
 
  1. private void addClickListener(){       
  2.     list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  3.         @Override
  4.         public void onItemClick(AdapterView av, View v, int pos,
  5.                 long id) {
  6.             Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString());
  7.             AppsListActivity.this.startActivity(i);
  8.         }
  9.     });
  10. }

9.通過整合實現(xiàn)完整功能

為了讓前面提到的全部內(nèi)容整合起來并實現(xiàn)完整功能,我們需要在AppsListActivity類的onCreate方法中調(diào)用loadApps、loadListView與addClickListener,具體代碼如下所示。

 
 
 
 
  1. protected void onCreate(Bundle savedInstanceState) {   
  2.     super.onCreate(savedInstanceState);
  3.     setContentView(R.layout.activity_apps_list);
  4.     loadApps();
  5.     loadListView();
  6.     addClickListener();
  7. }

下面編譯并運行我們的啟動器應(yīng)用,并再一次運行以查看結(jié)果。大家現(xiàn)在應(yīng)該已經(jīng)能夠在啟動器主屏幕中點擊該按鈕后查看所有可以啟用的應(yīng)用程序了。別猶豫,快點觸其中一個嘗試一下吧。

總結(jié)

大家現(xiàn)在已經(jīng)擁有自己的定制化啟動器了。它很簡單也很粗糙,但我們完全可以陸續(xù)為其添加更多功能特性、從而讓它逐步得到完善。如果大家想進(jìn)一步了解能夠在啟動器中引入哪些自定義項目,我建議各位點擊此處查看Android開發(fā)者門戶當(dāng)中給出的示例應(yīng)用程序。


文章名稱:如何在Android上開發(fā)屬于自己的定制化啟動器
分享URL:http://m.5511xx.com/article/cohpjec.html