A. android 創建一個XML文件,如何在讀這個XML文件時,得到讀取的時間
回答:格式自定,按照程序編寫,回即得讀取時間。
方法步驟:如下
一、布局界面
二、寫一個xml文件
[java] view plain
三、寫一個和xml相對應的bean
[java] view plain
<span style="color:#000000;">[java] view plainprint?
package com.example.lession04_pull.domain;
四、寫一個Pul的服務類
[java] view plain
<span style="color:#000000;">[java] view plainprint?
package com.example.lession04_pull.service;
// 解析文件
xmlPullParser.setInput(is, "UTF-8");
//獲取解析的事件類型
int eventType=xmlPullParser.getEventType();
//判斷文件解析的是否完畢
while(eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
persons=new ArrayList<Person>();
break;
//創建person對象
currentPerson=new Person();
currentPerson.setId(Integer.parseInt(xmlPullParser
.getAttributeValue(null, "id")));
}else if("name".equals(tagName)){
currentPerson.setName(xmlPullParser.nextText());
//把person對象放到集合中去
persons.add(currentPerson);
currentPerson=null;
// 寫入
public boolean write(List<Person> persons) {
// 採用pull解析進行實現
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 獲取sdcard目錄 文件對象
File sdCardDir = Environment.getExternalStorageDirectory();
// 創建文件
File file = new File(sdCardDir, "mycsdn.xml");
XmlSerializer serializer = Xml.newSerializer();
FileOutputStream fos = null;
try {
// 根據文件對象創建一個文件的輸出流對象
fos = new FileOutputStream(file);
// 設置輸出的流及編碼
serializer.setOutput(fos, "UTF-8");
// 設置文件的開始
serializer.startDocument("UTF-8", true);
// persons標簽開始
serializer.startTag(null, "persons");
for (Person person : persons) {
// person標簽的開始
serializer.startTag(null, "person");
// 設置person標簽的屬性
serializer.attribute("null", "id", person.getId() + "");
// 設置person標簽的子標簽 name
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
// 設置person標簽的子標簽的age
serializer.startTag(null, "age");
serializer.text(person.getAge() + "");
serializer.endTag(null, "age");
// person標簽的結束
serializer.endTag(null, "person");
}
// persons標簽的結束
serializer.endTag(null, "persons");
補充說明:
有些時候,我們需要生成一個XML文件,生成XML文件的方法有很多,如:可以只使用一個StringBuilder組拼XML內容,然後把內容寫入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,這里推薦使用Pull解析器。
B. android 如何在應用程序中修改系統時間
在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函數來修改系統時間,可惜無論你怎麼調用這個函數都是沒用的,無論模擬器還是真機,在logcat中總會得到"Unable to open alarm driver: Permission denied ".這個函數需要root許可權或者運行與系統進程中才可以用。
本來以為就沒有辦法在應用程序這一層改系統時間了,後來在網上搜了好久,知道這個目的還是可以達到的。
第一個方法簡單點,不過需要在Android系統源碼的環境下用make來編譯:
1. 在應用程序的AndroidManifest.xml中的manifest節點中加入
"android:sharedUserId="android.uid.system"這個屬性。
2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
3. 使用mm命令來編譯,生成的apk就有修改系統時間的許可權了。
第二個方法麻煩點,不過不用開虛擬機跑到源碼環境下用make來編譯:
1. 同上,加入"android:sharedUserId="android.uid.system"這個屬性。
2. 使用eclipse編譯出apk文件,但是這個apk文件是不能用的。
3. 用壓縮軟體打開apk文件,刪掉META-INF目錄下的CERT.SF和CERT.RSA兩個文件。
4. 使用目標系統的platform密鑰來重新給apk文件簽名。這步比較麻煩,
首先找到密鑰文件,在我的Android源碼目錄中的位置是"build argetproctsecurity",下面的platform.pk8和platform.x509.pem兩個文件。
然後用Android提供的Signapk工具來簽名,signapk的源代碼是在"build oolssignapk"下,用法為"signapk platform.x509.pem platform.pk8 input.apk output.apk",文件名最好使用絕對路徑防止找不到,也可以修改源代碼直接使用。這樣最後得到的apk和第一個方法是一樣的。
最後解釋一下原理,首先加入android:sharedUserId="android.uid.system"這個屬性。通過Shared User id,擁有同一個User id的多個APK可以配置成運行在同一個進程中。那麼把程序的UID配成android.uid.system,也就是要讓程序運行在系統進程中,這樣就有許可權來修改系統時間了。
只是加入UID還不夠,如果這時候安裝APK的話發現無法安裝,提示簽名不符,原因是程序想要運行在系統進程中還要有目標系統的platform key,就是上面第二個方法提到的platform.pk8和platform.x509.pem兩個文件。用這兩個key簽名後apk才真正可以放入系統進程中。第一個方法中加入LOCAL_CERTIFICATE := platform其實就是用這兩個key來簽名。
這也有一個問題,就是這樣生成的程序只有在原始的Android系統或者是自己編譯的系統中才可以用,因為這樣的系統才可以拿到 platform.pk8和platform.x509.pem兩個文件。要是別家公司做的Android上連安裝都安裝不了。試試原始的Android 中的key來簽名,程序在模擬器上運行OK,不過放到G3上安裝直接提示"Package ... has no signatures that match those in shared user android.uid.system",這樣也是保護了系統的安全。
C. 關於android遍歷文件按照時間排序的問題
我覺得方便的話就是把它存成整數,date.getTime(),這樣排序就簡單了,然後返回成日期可以用new Date(time);
D. 如何在adb shell下設置Android的時間
用adb
shell
mpsys
activity命令查看
(2)另外用"adb
logcat
|
grep
ActivityManager"查看前運行Activity
android2.2用file.setLastModified(long
time)設置文件修改間版本像功能禁用android2.3版本設置文件修改間
E. 安卓系統文件的寫入時間為什麼是1970年
以下全文,全本人手打。
安卓系統文件的寫入時間為什麼是1970年?
是因為Unix時間戳是以1970年計時起點時間的。
而且linux是來源於Unix,所以Linux也是1970年。
IOS和安卓都是基於Linux的,所以安卓也是1970年。
------------------------------------------------------------------------------
最開始的Unix時間戳,為什麼從1970年開始而不是其它年份?
是因為unix誕生於1969年,1970年開始使用。
------------------------------------------------------------------------------
為什麼使用時間是1970-2038年?
是因為最初32位能表示的最長時間是68年,設定為1970開始,結束時候是2038年,正好滿足使用。
------------------------------------------------------------------------------
另外:
unix誕生於1969年,linux誕生於1991年,安卓誕生於2007年
不是樓上那兩人亂說的時間,也不是它們說的作者生日,那個年代的作者只考慮實用性,沒那麼多花花,不像現在的程序員和總監,不重視程序基本功能,反而把重心放在沒有的地方上。
F. 為什麼安卓根目錄文件夾顯示的日期都不一樣,有1970、1971、2009,甚至有的目錄沒有日期
這很正常。根目錄文件夾每次開機時由設備的boot分區載入到根目錄而得,一部分文件夾是開機前期生成的,設備在載入這些文件夾時不考慮時間。還有一部分文件夾在開機後期執行開機腳本時或開機後使用時系統對它進行了改動,因此時間各異。希望幫到你。
G. Android如何獲取文件的最後訪問時間,創建時間
資料庫中的文件的話,要adb shell進去查看資料庫有沒有該欄位。存儲卡上的文件的話,java中沒有獲取文件創建事件的介面。
一、 從resource中的raw文件夾中獲取文件並讀取數據(資源文件只能讀不能寫)
String res = "";
try{
InputStream in = getResources().openRawResource(R.raw.bbi);
//在\Test\res\raw\bbi.txt,
int length = in.available();
byte [] buffer = new byte[length];
in.read(buffer);
//res = EncodingUtils.getString(buffer, "UTF-8");
//res = EncodingUtils.getString(buffer, "UNICODE");
res = EncodingUtils.getString(buffer, "BIG5");
//依bbi.txt的編碼類型選擇合適的編碼,如果不調整會亂碼
in.close();
}catch(Exception e){
e.printStackTrace();
}
myTextView.setText(res);//把得到的內容顯示在TextView上
二、 從asset中獲取文件並讀取數據(資源文件只能讀不能寫)
String fileName = "yan.txt"; //文件名字
String res="";
try{
InputStream in = getResources().getAssets().open(fileName);
// \Test\assets\yan.txt這里有這樣的文件存在
int length = in.available();
byte [] buffer = new byte[length];
in.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
}catch(Exception e){
e.printStackTrace();
}
三、 從sdcard中去讀文件,首先要把文件通過\android-sdk-windows\tools\adb.exe把本地計算機上的文件到sdcard上去,adb.exe push e:/Y.txt /sdcard/, 不可以用adb.exe push e:\Y.txt \sdcard\ 同樣: 把模擬器上的文件到本地計算機上用: adb pull ./data/data/com.tt/files/Test.txt e:/
String fileName = "/sdcard/Y.txt";
//也可以用String fileName = "mnt/sdcard/Y.txt";
String res="";
try{
FileInputStream fin = new FileInputStream(fileName);
//FileInputStream fin = openFileInput(fileName);
//用這個就不行了,必須用FileInputStream
int length = fin.available();
byte [] buffer = new byte[length];
fin.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
fin.close();
}catch(Exception e){
e.printStackTrace();
}
myTextView.setText(res);
H. android下如何修改文件時間
分兩個步驟:
1、修改文件.xml增加代碼24紅色標記表示24小時制,也可以改為12(12小時制)
2、修改文件gsDatabaseHelper.java找到函數loadSystemSettings (),在函數中增加以下語句:loadStringSetting(stmt, Settings.System.TIME_12_24, R.string.time_12_24);
I. android 怎麼修改出廠默認日期和默認時區
[DESCRIPTION]
如何修改為出廠時區為指定的時區和默認的日期?
[Solution]
時間信息預設信息都是0, 在rtc 初試化 時候設置的.
由於RTC 基本上不會斷電,所以它的初試化只做一次,即使重新download bin 檔.
用FlashTool 執行Format, 再執行download (不要用format -->download button), 或
者RTC斷電一段時間,就可以觀察到日期恢復到出廠值。
修改RTC默認日期:
修改文件
\alps\mediatek\custom\[project]\preloader\ inc\cust_rtc.h
\alps\mediatek\custom\[project]\kernel\rtc\rtc\rtc-mt65XX.h
#define RTC_DEFAULT_YEA 2012
#define RTC_DEFAULT_MTH 2
#define RTC_DEFAULT_DOM 1
修改默認日期:
在JB之前,進行以上修改即可,如果是JB以後,還需要進行以下修改:
(如果下面的修改還是無效,請參考FAQ08916,FAQ08719,FAQ07606)
[File]
framework\services\java\com\android\server\NetworkTimeUpdateService.java
[Function]
systemReady()
[Code]
if(isFirstBoot){
Time today = new Time(Time.getCurrentTimezone());
today.setToNow(); // 將時間恢復到RTC時間
today.set(1, 0, mDefaultYear ); //設立出廠默認日期,mDefaultYear是默認年份
如果想恢復出廠設置後,系統時間不變,可使用today.setToNow();
如果想恢復出廠設置後,系統時間也恢復成出廠時間,可使用today.set(1, 0, mDefaultYear );
這個today.set方法有6個參數的重載,可以精確到秒,具體使用方法請自行查詢API,所以在這里設
置系統默認時間就可以了。
如果要設置出廠默認年份需要修改
1) mediatek\frameworks\base\res\res\values\config.xml將
default_restore_year 修改成 2013
<!-- default year for first power on-->
<integer name="default_restore_year">2013</integer>
2)
frameworks\base\services\java\com\android\server\NetworkTimeUpdateService.
java
if(today.year <= 2010){ //刪除此行判斷條件
today.set(today.monthDay, today.month, 2013);
Log.d(TAG, "Set the year to 2013");
SystemProperties.set(BOOT_SYS_PROPERTY, "false");
SystemClock.setCurrentTimeMillis(today.toMillis(false));}
修改後的表現可通過Setting菜單->時間日期設置):
修改默認時區:
在系統屬性中增加下面欄位(假設改為Moscow)
路徑:\alps\mediatek\config\[project]\system.prop
persist.sys.timezone = Europe/Moscow
注意:默認時區的修改會影響默認時間的值,會根據與格林尼治標准時間差來更新時間,這是正常
現象。如當前設置為中國標准時間GMT+8:00,則手機的出廠時間會變為8:00。