編輯: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);
效果圖如下:
Android應用開發工程目錄作用介紹
1、src:java源碼文件,自己寫的。 2、gen:自動生成的java文件,包名與主包名一致,ADT裡自動生成的。 (1)BuildConfig:配置文件,不能
Android開發之SQLite的使用方法
前言 SQLite是一種輕量級的小型數據庫,雖然比較小,但是功能相對比較完善,一些常見的數據庫基本功能也具有,在現在的嵌入式系統中使用該數據庫的比較多,因為
Android加載Spinner
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
Android仿水波紋流量球進度條控制器
仿水波紋流球進度條控制器,Android實現高端大氣的主流特效,供大家參考,具體內容如下 效果圖: CircleView 這裡主要是實現中心圓以及水波特效