編輯:Android開發實例
友好的視覺感知和穩定的不出錯表現,來自於我們追求美感和考慮的全面性,博客園從技術的角度,一直我都很欣賞。
這篇文章是android開發人員的必備知識,是我特別為大家整理和總結的,不求完美,但是有用。
這一篇是對上一篇《Android學習系列(2)--App自動更新之通知欄下載》的補充,因此只是以點為要,點到為止。
1.內部存儲
出於考慮到用戶可能禁掉了SDCard或者電腦暫時插在電腦上且為磁盤連接狀態等等,對於這麼個情況下,我們應該也要保證我們的程序也是能正常的運行。所以我們要考慮內部存儲。
我暫時把內部存儲定在/data/data/xxxxxappxxxx/files目錄,核心代碼如下:
//創建目錄和文件 if(android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState())){ updateDir = new File(Environment.getExternalStorageDirectory(),Global.downloadDir); }else{ //files目錄 updateDir = getFilesDir(); } updateFile = new File(updateDir.getPath(),getResources().getString(titleId)+".apk");
2.內部存儲的權限
一起都運行的正常,但是當我們幫下下來的apk文件執行運行操作的時候,確提示如下,
"解析包錯誤"??其實你下載的文件並不一定就是壞的或者錯誤的,也可能是android系統的權限在作怪。在你執行之前,加上如下核心代碼:
String cmd = "chmod +x " +updateFile.getPath(); try { Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); }
3.通知欄顯示進度條組件的一個bug。
在通知欄設置進度條的可見性,會無緣無故的崩潰。
//下面一句是沒有語法錯誤的,但是會導致程序出錯 //為了解決這個問題,後面我們會再progressView外面包裹一層LinearLayout來控制可見性 updateNotification.contentView.setViewVisibility(progressViewID, View.GONE);
4.自定義進度條顯示視圖。
布局文件updata_nitification.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:layout_weight="2" android:paddingLeft="5dip"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="left|center_vertical" android:orientation="horizontal" android:layout_weight="1"> <ImageView android:src="@drawable/icon" android:layout_width="24dip" android:layout_height="fill_parent" android:scaleType="fitCenter"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" android:textColor="#000000" android:paddingLeft="5dip" android:textSize="16dip"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="left" android:orientation="horizontal" android:layout_weight="1"> <TextView android:id="@+id/update_notification_progresstext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#8F8F8F" android:textSize="14dip"/> <LinearLayout android:id="@+id/update_notification_progressblock" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ProgressBar android:id="@+id/update_notification_progressbar" android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"/> </LinearLayout> </LinearLayout> </LinearLayout>開始下載:
updateNotification.contentIntent = updatePendingIntent; updateNotification.contentView.setProgressBar(com.cnblogs.tianxia.subway.R.id.update_notification_progressbar, 100, 0, false); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, "0%");正在下載,顯示下載進度條:
updateNotification.contentView.setProgressBar(com.cnblogs.tianxia.subway.R.id.update_notification_progressbar, 100, (int)(totalSize*100/updateTotalSize), false); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, (int)(totalSize*100/updateTotalSize)+"%"); updateNotificationManager.notify(0, updateNotification);下載完成,點擊可以安裝:
//點擊安裝PendingIntent Uri uri = Uri.fromFile(updateFile); Intent installIntent = new Intent(Intent.ACTION_VIEW); installIntent.setDataAndType(uri, "application/vnd.android.package-archive"); updatePendingIntent = PendingIntent.getActivity(UpdateService.this, 0, installIntent, 0); updateNotification.defaults = Notification.DEFAULT_SOUND;//鈴聲提醒 updateNotification.contentIntent = updatePendingIntent;//安裝界面 updateNotification.contentView.setViewVisibility(com.cnblogs.tianxia.subway.R.id.update_notification_progressblock, View.GONE); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, "下載完成,點擊安裝!"); updateNotificationManager.notify(0, updateNotification);效果圖如下:
1、src:java源碼文件,自己寫的。 2、gen:自動生成的java文件,包名與主包名一致,ADT裡自動生成的。 (1)BuildConfig:配置文件,不能
前言 SQLite是一種輕量級的小型數據庫,雖然比較小,但是功能相對比較完善,一些常見的數據庫基本功能也具有,在現在的嵌入式系統中使用該數據庫的比較多,因為
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
仿水波紋流球進度條控制器,Android實現高端大氣的主流特效,供大家參考,具體內容如下 效果圖: CircleView 這裡主要是實現中心圓以及水波特效