android基礎(chǔ)筆記版手機(jī)衛(wèi)士_第1頁(yè)
android基礎(chǔ)筆記版手機(jī)衛(wèi)士_第2頁(yè)
android基礎(chǔ)筆記版手機(jī)衛(wèi)士_第3頁(yè)
android基礎(chǔ)筆記版手機(jī)衛(wèi)士_第4頁(yè)
android基礎(chǔ)筆記版手機(jī)衛(wèi)士_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、寶貴建議請(qǐng)發(fā)送至: HYPERLINK mailto:wangzhenyang wangzhenyang HYPERLINK Copyright2014 黑馬程序員版權(quán)所有- HYPERLINK 編程,始于黑馬 Android課程同步筆記Alpha 0.01版 Android課程同步筆記Alpha 0.01版 HYPERLINK wangzhenyang By陽(yáng)哥 看得懂、學(xué)得會(huì)、記得住 陽(yáng)哥筆記-Android 技術(shù)支持:法師、老黃、阿琛、馮馮 HYPERLINK Copyright2014 黑馬程序員版權(quán)所有 Android手機(jī)衛(wèi)士-01Splash界面()1.1 Splash界面的作用1

2、、用來(lái)展現(xiàn)產(chǎn)品的Logo;2、應(yīng)用程序初始化的操作;3、檢查應(yīng)用程序的版本;4、檢查當(dāng)前應(yīng)用程序是否合法注冊(cè);1.2 Splash界面布局RelativeLayout 1.3動(dòng)態(tài)獲取應(yīng)用程序版本在SplashActivity中的onCreate方法中調(diào)用getVersion方法,用于動(dòng)態(tài)顯示當(dāng)前應(yīng)用的版本信息。privateprivate String getVersion()try /通過(guò)PackageManager獲取安裝包信息PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),0);/

3、返回版本信息return packageInfo.versionName; catch (NameNotFoundException e) return ;1.4 鏈接服務(wù)器查看版本更新信息在程序啟動(dòng)的時(shí)候會(huì)鏈接服務(wù)器獲取最新版本信息,然后將自己的版本跟從服務(wù)器獲取的版本信息進(jìn)行對(duì)比,如果不一致(有最新版本)則提示用戶更新。注意:1、這里我們使用到了網(wǎng)絡(luò),因此要在清單文件中添加android.permission.INTERNET權(quán)限。2、因?yàn)樵L問(wèn)網(wǎng)絡(luò)是“耗時(shí)”過(guò)程,因此我們把檢查版本更新業(yè)務(wù)要放在子線程中進(jìn)行。privateprivate void checkUpdate()new Thre

4、ad(new Runnable() Overridepublic void run() Message message = Message.obtain();try URL url = new URL(getString(R.string.serverurl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setConnectTimeout(2000);connection.setReadTimeout(2000);connection.setRequestMethod(GE

5、T);connection.connect();int code = connection.getResponseCode();if (code=200) InputStream inputStream = connection.getInputStream();String string = StreamUtil.stream2String(inputStream);System.out.println(請(qǐng)求結(jié)果:+string);JSONObject json = new JSONObject(string);version = (String) json.get(version);dow

6、nloadurl = (String)json.get(downloadurl);description = (String)json.get(description);if (getVersion().equals(version) message.what = ENTER_HOME;elsemessage.what = SHOW_UPDATE;else message.what = SERVER_ERROR;message.obj = 獲取更新失?。?code; catch (Exception e) System.out.println(獲取更新失?。?e);message.what =

7、 NET_ERROR;message.obj = 獲取更新失?。?e;finallyhandler.sendMessage(message);).start();1.5給Splash界面添加啟動(dòng)動(dòng)畫在onCreate方法中,給Splash界面添加啟動(dòng)畫面。這里添加的是漸變動(dòng)畫,透明度從0到1漸變,時(shí)長(zhǎng)500毫秒。AlphaAnimation AlphaAnimation alphaAnimation = new AlphaAnimation(0.f, 1.f);RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.

8、rl_root);alphaAnimation.setDuration(500);relativeLayout.startAnimation(alphaAnimation);1.6 升級(jí)應(yīng)用程序當(dāng)檢查到有最新版本的時(shí)候,我們會(huì)提示用戶是否升級(jí),如果用戶選擇了升級(jí)那么我們將在線進(jìn)行升級(jí)。升級(jí)代碼如下。在下載應(yīng)用的時(shí)候我們使用了第三方工具FinalHttp。privateprivate void showUpdateDialog()AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle(發(fā)現(xiàn)新版本);

9、builder.setMessage(已經(jīng)發(fā)布新版本了,希望您能及時(shí)升級(jí)。);builder.setNeutralButton(升級(jí), new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) /升級(jí)FinalHttp http = new FinalHttp();http.configTimeout(1000);http.downl

10、oad(downloadurl, Environment.getExternalStorageDirectory()+/mobileSage2.0apk, new AjaxCallBack() OverrideOverridepublic void onFailure(Throwable t, int errorNo, String strMsg) super.onFailure(t, errorNo, strMsg);Toast.makeText(SplashActivity.this, 下載失敗。, Toast.LENGTH_SHORT).show();enterHome();Overri

11、depublic void onLoading(long count, long current) tv_download_progress.setVisibility(View.VISIBLE);int progress = (int)(current*100/count);tv_download_progress.setText(下載進(jìn)度:+progress+%);Overridepublic void onStart() super.onStart();Overridepublic void onSuccess(File t) installAPK(t););elseToast.make

12、Text(SplashActivity.this, sd卡不可用, Toast.LENGTH_SHORT).show(););builder.setPositiveButton(暫不升級(jí), new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) dialog.dismiss();enterHome(););builder.setOnCancelListener(new OnCancelListener() Overridepublic void onCancel(DialogInt

13、erface dialog) enterHome(););builder.show();private void installAPK(File file) Intent intent = new Intent();intent.setAction(ent.action.VIEW);intent.setDataAndType(Uri.fromFile(file), application/vnd.android.package-archive);startActivity(intent);注意:安裝APK是通過(guò)一個(gè)隱式意圖實(shí)現(xiàn)的。1.7兩種上下文的區(qū)別對(duì)話框是Activity的一部分,對(duì)話框是

14、掛載在Activity上面的。如果Activity不存在,對(duì)話框就不能被創(chuàng)建。 Activity 實(shí)際上是應(yīng)用程序context上下文的一個(gè)子集。getApplicationContext();生命周期長(zhǎng),只要應(yīng)用還存活它就存在;this 生命周期短,只要Activity不存在了,系統(tǒng)就會(huì)回收;其中:getBaseContext(),getApplication(),getApplicationContext(); 都不能放在AlertDialog做上下文;getApplicationContext() 使用場(chǎng)景是比如頻繁需要操作的數(shù)據(jù)庫(kù)。 推薦用法:Activity.this。應(yīng)用程序主界面

15、()應(yīng)用程序的主界面采用9宮格的形式,通過(guò)GridView控件來(lái)實(shí)現(xiàn)。布局文件清單如下:? 界面效果圖如下所示:2.1 自定義可以滾動(dòng)的TextView控件定義一個(gè)文字可以滾動(dòng)的Button示例如下:定義一個(gè)文字可以滾動(dòng)的TextView,編寫一個(gè)類FocusedTextView繼承TextView類。覆寫isFocused方法。publicpublic class FocusedTextView extends TextViewpublic FocusedTextView(Context context) super(context);public FocusedTextView(Conte

16、xt context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle);public FocusedTextView(Context context, AttributeSet attrs) super(context, attrs);Overridepublic boolean isFocused() return true;使用該控件時(shí)方法如下: 注意:這里的標(biāo)簽必須使用類全名。設(shè)置中心()3.1自定義設(shè)置中心的組合控件我們的設(shè)置中心如下實(shí)例圖所示,設(shè)置中心的每一個(gè)Item都是自定義控件。我們這里首先制作“

17、設(shè)置自動(dòng)更新”功能。該設(shè)置控制軟件啟動(dòng)時(shí)是否要檢查更新。進(jìn)入設(shè)置中心需要在主界面給“設(shè)置中心”圖標(biāo)添加一個(gè)點(diǎn)擊事件。當(dāng)點(diǎn)擊該“設(shè)置中心”的時(shí)候進(jìn)入設(shè)置中心界面。在主HomeActivity中給GridView設(shè)置點(diǎn)擊事件。點(diǎn)擊不同的圖標(biāo)進(jìn)入不同的功能界面。privateprivate GridView list_home;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.home_activity);list_home = (

18、GridView) findViewById(R.id.list_home);list_home.setAdapter(new HomeAdapter();list_home.setOnItemClickListener(new HomeItemClickListener();privateprivate class HomeItemClickListener implements OnItemClickListener Overridepublic void onItemClick(AdapterView parent, View view, int position, long id) s

19、witch (position) case 0:showPwdDialog();break;case 1:entryCallSMSSafe();break;case 2:entryAppManager();break;case 3:entryTaskManager();break;case 4:entryTraaficManager();break;case 5:entryAntiVirus();break;case 6:entryCleanCache();break;case 7:entryAtools();break;case 8:entrySetting();break;default:

20、break;創(chuàng)建SettingActivity類,并創(chuàng)建對(duì)應(yīng)的布局文件。對(duì)于上圖中的布局我們發(fā)現(xiàn)有很多功能相似的地方,比如每一個(gè)設(shè)置項(xiàng)的布局基本相同,都有CheckBox選項(xiàng)等,因此我們會(huì)將上面的每一個(gè)條目抽取成自定義控件。如果不抽取出自定義的布局,那么原始布局文件如下:? 我們針對(duì)上面的布局抽取出單獨(dú)的自定義類SettingItemView。我們把該類放在com.itheima.mobileSafe.ui包下面。SettingItemView類繼承RelativeLayout類。代碼清單如下:publicpublic class SettingItemView extends Relativ

21、eLayout private CheckBox cb_status;private TextView tv_desc;private TextView tv_title;private String title;private String desc_on;private String desc_off;private void initView(Context context) RelativeLayout relativeLayout = (RelativeLayout) View.inflate(context, R.layout.setting_item, SettingItemVi

22、ew.this);cb_status = (CheckBox) relativeLayout.findViewById(R.id.cb_checked);cb_status.setClickable(false);tv_desc = (TextView) relativeLayout.findViewById(R.id.tv_desc);tv_title = (TextView) relativeLayout.findViewById(R.id.tv_tile);tv_title.setText(title);if(cb_status.isChecked()tv_desc.setText(de

23、sc_on);else tv_desc.setText(desc_off);public SettingItemView(Context context) super(context);initView(context);public SettingItemView(Context context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle);initView(context);/* * 該構(gòu)造函數(shù)是在布局界面使用的 * attrs.getAttributeValue 方法的第一個(gè)參數(shù)是命名空間,命名空間大

24、的/apk/res/部分是參考的系統(tǒng)命名空間規(guī)則,后面跟上包名稱 * 第二個(gè)參數(shù)是屬性名稱 */public SettingItemView(Context context, AttributeSet attrs) super(context, attrs);/獲取布局中的title屬性值title = attrs.getAttributeValue(/apk/res/com.itheima.mobileSafe, title);/獲取當(dāng)checkBox打開時(shí)對(duì)應(yīng)的描述信息desc_on = attrs.getAttributeValue(/apk/res/com.itheima.mobileSafe, desc_on);/獲取當(dāng)checkBox關(guān)閉時(shí)對(duì)應(yīng)的描述信息desc_off = attrs.getAttributeValue(/apk/res/com.itheima.mobileSafe, desc_off);/初始化控件initView(context);public void setChecked(boolean isChecked)cb_statu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論