真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android常量,Android常量切換

Android 保持屏幕常亮的幾種方法

一、前言

創(chuàng)新新互聯(lián),憑借10余年的網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計經(jīng)驗,本著真心·誠心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計網(wǎng)站有上千余家案例。做網(wǎng)站建設(shè),選創(chuàng)新互聯(lián)建站。

在實際開發(fā)的過程中,會有一些需要保持屏幕常亮,避免進入鎖屏狀態(tài)的需求。最常見的就是視頻播放的過程中,如果屏幕突然暗了,或者直接鎖屏,會非常的影響用戶的體驗。

本篇文章就對 Android 下,如何保持屏幕常量,做一個簡單的記錄和總結(jié)。

二、幾種常見的方法

1、WakeLock

使用 WakeLock 是一種教科書式的比較常規(guī)的手段,使用起來也非常的簡單。

可以看到,WakeLock 主要是通過 PowerManager 獲取,然后通過acquire()方法獲取一個 WakeLock 資源,WakeLock 也是一種資源,在使用完成之后,別忘了調(diào)用release()方法進行釋放。

使用 WakeLock 還需要額外的聲明 WAKE_LOCK 權(quán)限。

當(dāng)然,使用 WakeLock 暫時來看,應(yīng)該還是沒有什么問題的。但是實際上,所有和屏幕亮度相關(guān)的 WakeLock 的 Flag ,在 API level 17+ 之上,都已經(jīng)被標(biāo)記廢棄了。可以看出 Android 在節(jié)能上做了很多努力,屏幕是費電大戶,既然已經(jīng)被廢棄掉了,正常來說,我們還是不推薦使用的。

更多和 PowerManager.WakeLock 相關(guān)的內(nèi)容,可以看看之前的一篇文章《PowerManager 不是只有 WakeLock 》。

2、FLAG_KEEP_SCREEN_ON

前面說了,WakeLock 已經(jīng)被標(biāo)記廢棄。雖然被廢棄了,但是實際上 Android 還是給我們提供了對應(yīng)的解決方案的,那就是使用FLAG_KEEP_SCREEN_ON的方式來標(biāo)記屏幕常亮。

FLAG_KEEP_SCREEN_ON 使用起來也非常的簡單,它是一個頁面 Window 上的一個 Flag ,使用addFlags()方法添加。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

當(dāng)然,這里使用完成之后,也是需要取消掉的。取消這個 Flag 使用clearFlags()方法來取消。

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

通常我們會在一個 Activity 的onResume()和onPause()方法中,分別調(diào)用這兩個方法。

看看 FLAG_KEEP_SCREEN_ON 的文檔解釋。

從這里可以看出來,它只作用在一個被顯示的 Window 上,并且保持設(shè)備屏幕高亮度的常亮。

其實這里也可以看出來,官方廢棄 WakeLock 而推薦使用 FLAG_KEEP_SCREEN_ON ,一部分原因在于 WakeLock 是一個全局的資源,而 FLAG_KEEP_SCREEN_ON 只是一個和 window 相關(guān)的資源,作用范圍更小了一些。并且它比 WakeLock 更好的一點在于,它不需要額外的申請權(quán)限,一般來說,我們還是推薦使用它的。

3、keepScreenOn

除了給 Window 添加一個 FLAG_KEEP_SCREEN_ON 的 Flag 之外,還可以對當(dāng)前可見的 View 調(diào)用 keepScreenOn() 方法來設(shè)置屏幕常亮。

keepScreenOn() 是 View 對象上的方法,同時也提供了布局中的屬性android:keepScreenOn來方便我們在布局中對其進行設(shè)置。

需要注意的一點,使用 keepScreenOn() 設(shè)置的常亮標(biāo)識,需要當(dāng)前 View 保持屏幕可見才行。所以一般而言,我們會在頁面的根布局中,添加此屬性。

通過文檔可以看到,實際上它的原理和 FLAG_KEEP_SCREEN_ON 一樣的,只是它更簡單,只需要對某個 View 設(shè)置,如果該 View 可見即生效,否者就不生效。

4、MediaPlayer的 setScreenOnWhilePlaying()

如果我們是使用一個 MediaPlayer 來進行視頻播放的話,MediaPlayer 還提供了setScreenOnWhilePlaying()方法,來設(shè)置屏幕常量。

其實沒什么好說的,繼續(xù)查看源碼可以看到其實最終調(diào)用的還是keepScreenOn()方法。當(dāng)然多了解一種方法也沒有什么壞處。

三、小結(jié)

保持屏幕常亮的方式有很多,選用我們需要的即可。當(dāng)然,最好還是不要使用 WakeLock 了,比較已經(jīng)被標(biāo)記為廢棄了。

android 靜態(tài)常量和枚舉哪個好

常量是直接編譯在代碼中的,而枚舉則是一種類,你可以通過反射根據(jù)值反查出它的枚舉形式是什么。

枚舉定義了值的范圍,但是常量沒有。所以要根據(jù)你的實際情況選擇。

比如你有一個變量,是中國所有的省,那么最好用枚舉,因為這些是固定不變的。在代碼里使用的時候更方便,也易懂。

Android藍牙設(shè)備的常量值是什么意思

可以理解為藍牙設(shè)備支持的協(xié)議類型device type 的取值如 DEVICE_TYPE_CLASSIC 1 BR/EDRDEVICE_TYPE_LE 2 LE-onlyDEVICE_TYPE_DUAL 3 雙模式BR/EDR/LEDEVICE_TYPE_UNKNOWN 0 藍牙不可用

android如何調(diào)用自定義類中的常量

常量用類名.常量名的方式調(diào)用

例如

class Test{

public static final int FINAL_VALUE = 1;

}

然后在任意類中都可以使用

Test.FINAL_VALUE來調(diào)用

Android 權(quán)限常量保存在哪個類中

1. 保存鍵值對(Saving Key-Value Sets)

如果你要存儲存儲小型的鍵值對(key-value)數(shù)據(jù)集的話,可以使用SharedPreferences API。SharedPreferences對象是一個包含鍵值對的文件,提供了讀和寫的方法。每一個SharedPreferences文件都被框架(framework)管理,并且既可以是私有的,也可以使公有的。以下內(nèi)容主要是:使用SharedPreferences APIs 來存儲和檢索簡單的數(shù)值。

Write to Shared Preferences

要寫入數(shù)據(jù),

1.先在SharedPreferences通過調(diào)用edit()方法創(chuàng)建一個SharedPreferences.Editor 。

2.通過putInt()和putString()來把鍵值對寫入,

3.然后調(diào)用commit()方法來保存。

For example:

//新建一個SharedPreferences文件,設(shè)定為private模式

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

//新建一個editor對象,通過SharedPreferences對象的edit()方法。

SharedPreferences.Editor editor = sharedPref.edit();

//調(diào)用editor的putInt()方法,參數(shù)就是鍵值對。

editor.putInt(getString(R.string.saved_high_score), newHighScore);

//調(diào)用editor的commit()方法,保存。

editor.commit();

Read from Shared Preferences

調(diào)用SharedPreferences對象的getInt()方法和getString()方法,讀取SharedPreferences文件。參數(shù)可以寫default,也可以寫key。返回值都是value。

//創(chuàng)建一個SharedPreferences對象

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

//參數(shù)我default情況

long default = getResources().getInteger(R.string.saved_high_score_default));

//參數(shù)為(key,default)情況

long highScore = sharedPref.getInt(getString(R.string.saved_high_score), default);

2.保存文件(saving files)

android系統(tǒng)里對文件進行讀寫,主要使用了File APIs。

File對象主要用來讀寫大的數(shù)據(jù)量。比如圖像文件、通過網(wǎng)絡(luò)交換的文件。

以下內(nèi)容基于讀者已經(jīng)了解Linux文件系統(tǒng)以及java.io里的標(biāo)準(zhǔn)文件輸入輸出API。

內(nèi)部存儲Internal storage的特點:

1.一直可用

2.是默認(rèn)程序的默認(rèn)文件訪問位置,其他app訪問不了。

3.卸載app時,系統(tǒng)會刪除這個app所有文件

Internal storage 可以確保用戶和其他app無法訪問你的文件。很好的私密性。

外部存儲External storage的特點:

1.并非一直可用。可以插在卡槽,但是卸載掉,這時候系統(tǒng)就看不到了,或者用戶把sd卡當(dāng)U盤使。

2.文件存儲不安全。sd卡拿出來,里面的信息就泄露了。

3.卸載app時,只有你在路徑getExternalFilesDir()保存文件的時候,系統(tǒng)才可以刪除這個app的文件。

如果不在這個路徑的話,那SD卡上就會有殘留文件了。

如果文件沒有訪問限制,或者你想讓文件為其他app所用,或者希望通過電腦查看,外部存儲不失為一種好方法。

TIPS:可以設(shè)置manifest文件里的android:installLocation屬性來讓app裝在外部存儲。

Obtain Permissions for External Storage

要向外部存儲寫文件,必須在manifest文件里聲明WRITE_EXTERNAL_STORAGE權(quán)限。

manifest ...

uses-permission

//寫入外部存儲文件的權(quán)限

android:name="android.permission.WRITE_EXTERNAL_STORAGE"

/

...

/manifest

注意:目前,所有的app都可以讀取外部存儲上的文件,不需要特殊的權(quán)限。但是以后這個肯定要改的,讀取外部存儲的文件也是需要權(quán)限的。所以也要在manifest文件里聲明READ_EXTERNAL_STORAGE權(quán)限。

manifest ...

uses-permission

//讀取外部存儲文件的權(quán)限

android:name="android.permission.READ_EXTERNAL_STORAGE"

/

...

/manifest

往內(nèi)部存儲寫文件是不需要權(quán)限的,從內(nèi)部存儲讀文件也是不需要權(quán)限的。

所以內(nèi)外存儲文件還有權(quán)限上的區(qū)別:外部的要權(quán)限,內(nèi)部的不需要。

Save a File on Internal Storage

保存一個文件到內(nèi)部存儲的時候,需要獲得一個存儲路徑,方法有二:

1.getFilesDir()--------返回文件File路徑

2.getCacheDir()--------返回一個緩存文件路徑

臨時緩存文件里存放著temporary cache files,確保不用這些文件的時候刪除,并有size上的控制,系統(tǒng)在低存儲空間的時候,會直接刪除這個臨時文件夾內(nèi)容。

在存儲路徑上創(chuàng)建文件時候,使用File()構(gòu)造器,參數(shù)為路徑,和文件名稱。

//使用File()構(gòu)造器,參數(shù)1:文件路徑 參數(shù)2:文件名稱

File file = new File(context.getFilesDir(), filename);

或者,可以調(diào)用openFileOutput()方法來獲取FileOutputStream,來向內(nèi)部存儲路徑寫文件。

String filename = "myfile";

String string = "Hello world!";

FileOutputStream outputStream;

try {

//調(diào)用方法創(chuàng)建流,參數(shù)1:文件名參數(shù)2:文件類型為私有

putStream = openFileOutput(filename, Context.MODE_PRIVATE);

//調(diào)用流的write方法

outputStream.write(string.getBytes());

//關(guān)閉流

outputStream.close();

}

catch (Exception e) {

e.printStackTrace();

}

如果要創(chuàng)建一個緩存文件,就要用createTempFile()方法。

以下代碼從url提取文件name,然后用那個name在緩存文件夾創(chuàng)建一個文件。

public File getTempFile(Context context, String url) {

File file;

try {

String fileName = Uri.parse(url).getLastPathSegment();

file = File.createTempFile(fileName, null, context.getCacheDir());

catch (IOException e) {

// Error while creating file

}

return file;

}

注意:app的內(nèi)部存儲路徑是由你的app的包的名稱指定的,在android文件系統(tǒng)的特定位置。技術(shù)上看,如果你把文件mode設(shè)置為可讀,其他app是可以讀取你的app的數(shù)據(jù)的。但是其他app要想讀取,必須要知道你的包的名稱和文件的名稱。除非你明確設(shè)定file mode為readable或者writable,否則其他app肯定沒法讀和寫你的internal file。 所以,只要你把文件mode設(shè)置為Context.MODE_PRIVATE,其他app是無論如何也沒法訪問到這個文件的。

Save a File on External Storage

因為外部存儲有可能不可用,所以用之前要查詢一下外部存儲的狀態(tài),使用之前肯定要查一下外部存儲的可用空間。調(diào)用getExternalStorageState()方法,如果返回的狀態(tài)是MEDIA_MOUNTED的話,外部存儲就是可用的,包括讀和寫。

//檢查外部存儲是否可以讀和寫

public boolean isExternalStorageWritable() {

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

return true;

}

return false;

}

//查看外部存儲是否至少可讀

public boolean isExternalStorageReadable() {

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state) ||

Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

return true;

}

return false;

}

有兩個文件夾來存放文件:

1.公共文件夾(Public files)

其他用戶和app都可以訪問,app卸載以后,文件仍然存在,其他app和用戶可以繼續(xù)使用。

比如:app拍的照片

2.私有文件夾(Private files)

文件私有,其他用戶和app無權(quán)訪問。app卸載以后,文件即被刪除。盡管文件存儲在外部存儲上,其他用戶

和app是可以訪問的,但是實際上,這些文件是不會向app以外的其他用戶提供數(shù)據(jù)的。、

比如:app下載的內(nèi)容和臨時文件

存儲public文件到外部存儲:調(diào)用getExternalStoragePublicDirectory()方法。這個方法有個參數(shù),來指定你要存儲文件的類型,這樣,其他公共文件夾就可以將其包括進去。比如 DIRECTORY_MUSIC和 DIRECTORY_PICTURES。

public File getAlbumStorageDir(String albumName) {

// 獲取用戶公共圖片文件夾路徑

File file = new File(Environment.getExternalStoragePublicDirectory(

Environment.DIRECTORY_PICTURES), albumName);

if (!file.mkdirs()) {

Log.e(LOG_TAG, "Directory not created");

}

return file;

}

存儲public文件到外部存儲:調(diào)用getExternalStoragePublicDirectory()方法。這個方法有個參數(shù),來指定你要存儲文件的類型,這樣,其他公共文件夾就可以將其包括進去。比如 DIRECTORY_MUSIC和 DIRECTORY_PICTURES。

public File getAlbumStorageDir(String albumName) {

// 獲取用戶公共圖片文件夾路徑

// 參數(shù)1:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

// 參數(shù)2:albumName

File file = new File(Environment.getExternalStoragePublicDirectory(

Environment.DIRECTORY_PICTURES), albumName);

if (!file.mkdirs()) {

Log.e(LOG_TAG, "Directory not created");

}

return file;

}

存儲private文件到外部存儲:調(diào)用getExternalFilesDir()方法,也要傳入一個指定文件類型的參數(shù)。以下是創(chuàng)建一個私人相冊的文件的代碼:

public File getAlbumStorageDir(Context context, String albumName) {

// 獲取應(yīng)用的私人相冊文件路徑

//參數(shù)1:context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)

//參數(shù)2:albumName

File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName);

if (!file.mkdirs()) {

Log.e(LOG_TAG, "Directory not created");

}

return file;

}

也可以調(diào)用 getExternalFilesDir()方法,傳如null參數(shù),這樣就會返回外部存儲的根目錄。

記住:

1. getExternalFilesDir()方法創(chuàng)建的文件路徑,會在用戶卸載這個app的時候被刪除。

2. 如果想讓你的文件路徑在app被卸載以后仍然存在,那么getExternalStoragePublicDirectory() 是一個更好的選擇。

3.無論是建立可以共享的文件路徑,還是私有文件路徑,使用API 常量來指定文件目錄類型是很重要的。比如,DIRECTORY_PICTURES,這可以確保系統(tǒng)正確的識別目錄里的數(shù)據(jù)。

Query Free Space

如果你事先知道要存儲的數(shù)據(jù)量的大小,你就可以先查詢一下可用空間有多少, 這樣就可以避免IOException,可用的方法是:getFreeSpace()和getTotalSpace()。

getFreeSpace()---返回剩余空間

getTotalSpace()---返回總空間。

但是返回的可用空間大小,并不說明,你就可以存入這么多的數(shù)據(jù)。如果空間比你要存入的數(shù)據(jù)大幾M,或者空間被占用率小于90%,都還可以,反之,就未必能存入。

并不需要每次存文件之前都來這么個判斷,加個異常捕捉就OK。而且,你也未必知道你要存入的數(shù)據(jù)有多大,你想判斷,也沒法判斷的,所以能catch這個IOException就行。

Delete a File

刪除文件最簡單的方法是調(diào)用文件本身的方法:delete()

myFile.delete();

如果文件存儲在內(nèi)部存儲介質(zhì)上,可以利用上下文的方法:deleteFile()

myContext.deleteFile(fileName);

注意:當(dāng)用戶卸載app時候,系統(tǒng)會刪除以下文件:

1.所有存儲在內(nèi)部介質(zhì)上的數(shù)據(jù)

2.使用getExternalFilesDir()創(chuàng)建路徑的外部介質(zhì)上的數(shù)據(jù)

但是,所有緩存文件夾是需要手動刪除的


分享名稱:android常量,Android常量切換
當(dāng)前地址:http://weahome.cn/article/hogdoc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部