androidlevel
❶ 如何從工程代碼角度判斷一個Android 的版本以及API Level
打開AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xxx.xxx"
android:versionCode="1" //這是程序的版本號
android:versionName="1.0" > //這個是程序的版本名
<uses-sdk
android:minSdkVersion="13" //兼容最小的系統
android:targetSdkVersion="17" />
❷ 如何更改android target api level
Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi")
例如:AndroidManifest.xml中,我們配置了sdk版本的最低為9,目標sdk為19
[html] view plain
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="19" />
當我們使用了大於sdk版本為9的API時候,編譯器就會提示警告。例如:
[java] view plain
import android.os.AsyncTask;
import android.os.Build;
public class Test {
static public<T> void executeAsyncTask(AsyncTask<T, ?, ?> task,T...params){
if (Build.VERSION.SDK_INT >= Build.VERSI
❸ android level-list怎麼使用
只需要循環一下,判斷即可。 示例代碼: 1.遍歷整個list集合 for(int i=0; i<list.size(); i++){ } 2.在for循環中增加判斷代碼 if(list.get(i).equals("指定")){} 3.得到每一個item進行判斷即可。
❹ 如何理解android中的api level
就是安卓開發包的版本號,比如安卓4.0對應的level是14,5.0對應的level是19
❺ Android可以遠程調用EJB嗎
技術上肯定允許,因為遠程調用本身只是一個網路通信過程,這跟HTTP通信沒有什麼本質的差別,僅僅是協議內容不同。
一般來說遠程系統互操作盡量是松耦合的,就是不需要知道對方系統是如何設計的,雙方只需要用相同的介面就可以了,那麼EJB這個東西是Java特有的,但我們已知EJB至少在EJB2.0以後我們跟CORBA就已經是兼容的,就是說對方用CORBA的方式調用也會是正常的,我們可以拿EJB的2個遠程介面(Home和Biz)來生成CORBA的Stub,然後用CORBA方式調用(這就不依賴於EJB的運行時庫,我想你肯定不打算把一個WebSphere或JBOSS這樣的EJB伺服器的客戶端運行庫復制到手機上吧?很麻煩的,而且還受版本變化影響)。
一般來說手機上的JavaAPI比如Android本身是不支持EJB的,很多像javax.rmi這樣的包都沒有,我找了 Android level 19 的 android.jar 看了,裡面的包沒有像 javax.rmi, javax.ejb 這樣企業應用API (這些是 J2EE的標准API,手機應該是不會提供的)。
通過 RMIC 是可以生成 CORBA Stub 可以用:
C:>rmic-iiop
C:>rmic-idl
除了CORBA之外,我們可以讓開發人員給現有的EJB提到一個SOAP方式的WebService介面,這在EJB2.1中已經有支持,現在的伺服器基本上也支持EJB2.0和2.0以上的版本了,拿著這個EJB的WSDL我們就可以用WebService方式來處理了,這樣其實我們可以用JavaScript來編碼xml和解碼xml來調用遠程WebService,這種方式更通用,不需要任何API庫的支持,我們至少可以把它當成最原始的xml文檔,甚至是純text文件來處理(連xmlAPI庫都不是必須的)。讓一個現有 EJB 支持 SOAP 其實不用改動代碼,基本上只是一個」添加一個新介面然後重新編譯並部署」的過程(比如我用IBM試用版的RAD 7配置WebSphere 就是這樣的,如果用便宜的伺服器這些工具可能不夠自動化)。
只是 android.jar 本身也不提供 CORBA 支持,這也是企業應用,我們最方便的方法還是 SOAP / Web 服務的方式,因為 android 自帶了 XML API,如果你的手機應用是基於 phonegap 的,那就更方便和自然快捷了,因為它們現成的 ajax api 來處理 web 服務。
❻ android中 API level 1和 API level 18 是什麼意思,有什麼區別
指的是android的版本,1就是最早的,18是最新的,一些新版本的api不能在老版本上使用。
❼ android 中 API level 指的是什麼什麼意思這個等級表示的
android 每個版本提供給開發者的 API都有版本的,你把這個level理解為版本差不多
❽ 聊聊Android6.0 以上系統許可權
一個新建的Android應用默認是沒有許可權的,這意味著它不能執行任何可能對用戶體驗有不利影響的操作或者訪問設備數據。為了使用受保護的功能,你必須包含一個或者多個標簽在你的app manifest中。
1、Android 6.0中許可權分為兩種,普通許可權和危險許可權(即運行時許可權,下面統稱運行時許可權)。
1.1普通許可權
如果你的應用manifest中只申明了普通許可權(也就是說,這些許可權對於用戶隱私和設備操作不會造成太多危險),系統會自動授予這些許可權。
1.2運行時許可權
如果你的應用manifest中聲明了運行時許可權(也就是說,這些許可權可能會影響用戶隱私和設備的普通操作),系統會明確的讓用戶決定是否授予這些許可權。系統請求用戶授予這些許可權的方式是由當前應用運行的系統版本來決定的。
1.2.1 Android6.0及以上的系統
如果你的設備運行的是Android6.0(API level 23)及以上的系統,並且你的應用的targetSdkVersion也是23或者更高,那麼應用向用戶請求這些許可權是實時的。這意味著用戶可以隨時取消 這些運行時許可權的授權。所以應用在每次需要用到這些運行時許可權的時候都需要去檢查是否還有這些許可權的授權。
1.2.2 Android 5.1及以下的系統
如果你的設備運行在Android5.1(API level 22)及以下的系統中,或者你的app的targetSdkVersion是22或者更低。系統會請求用戶在apk安裝的時候授予這些許可權。
如果你的應用更新的時候添加了一個許可權,系統會在用戶更新應用的時候請求用戶授予這個許可權 , 一旦用戶安裝了這個應用,唯一可以取消授權的方式就是卸載掉這個應用。 注意這句話的意思,想一下如果app的targetSdkVersion是22或者以下,但是運行在Android6.0及以上的設備中會有什麼問題?後面會分析這個問題 。
常常來說一個授權失敗會拋出SecurityException,然而這並不是在 所有情況下都會發生。比如,發送一個廣播去檢查授權(SendBroadcast(Intent)),數據會被發送給所有接收者,但是當這個方法的請求返 回的時候,你不會收到任何一個因為授權失敗拋出的異常,其實在大多數情況下,授權失敗只會列印系統日誌。
1.3自動許可權調整
簡單的說,如果你的app targetSdkVersion是3,而你當前運行的系統版本是4,那麼在android version 4 中新添加的許可權會自動添加到你的app中。
比如 WRITE_EXTERNAL_STORAGE許可權是在api 4的時候添加的,而你的應用的targetSdkVersion是3,那麼這個許可權會自動添加到你的應用中。而且在官方商店上這個許可權也會列出來(盡管可能你並不需要這個許可權)。
所以建議經常更新你的targetSdkVersion到最新版本。
下面來回答上面的那個問題,如果app的targetSdkVersion是22或者以下,但是運行在android 6.0或以上版本的手機中,會發生什麼?
安裝過程中,會一起請求用戶授予所有 許可權,如果用戶拒絕,將不能安裝這個app,只有用戶全部同意這些授權,才能安裝這個應用,但是問題來了,安裝好了這個應用之後,android6.0以 上的系統中,用戶是可以去設置中取消授權的,而且是隨時都可以取消,所以很多運行時許可權可能也得不到,目前官方的做法是,如果用戶取消該項授權,那麼依賴 該項授權的方法的返回值為null,所以你的app可能會報空指針異常。以後是否會針對22以下的app做改變還不得而知,畢竟crash是很難讓人接受 的,但是crash是由用戶造成的,用戶應該也可以理解。
2、普通許可權和運行時許可權
系統許可權會被傳遞給兩種不同的保護級別,我們所知道這兩種最重要的保護級別就是普通許可權和運行時許可權。
2.1 普通許可權
普通許可權的覆蓋區域是在你的app需要訪問沙盒以外的數據和資源的時候,但是對用戶隱私和其他app的操作只有很少的影響,比如開啟手電筒的許可權。這個時候,系統會自動授權這些普通許可權。
Normal Permissions:
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
2.2 運行時許可權
運行時許可權的覆蓋區域是你的app想要的數據和資源涉及用戶的隱私信息,或者是可能潛在的影響用戶的存儲數據或者其他app的操作。比如,請求獲取用戶聯系人信息的許可權。如果一個app申明了運行時許可權,用戶必須明確的授權這些許可權給app。
2.3 許可權組
所有的運行時許可權都屬於對應的許可權組,如果你的app運行在android6.0及以上系統,下面的規則都適用:
2.3.1 如果一個app在manifest中請求了一個運行時許可權,而且app還沒有得到這個運行時許可權所在的許可權組中的任何一個運行時許可權授權,那麼系統會彈出一個對話框,描述app想要訪問的運行時許可權的許可權組,這個對話框不會描述這個許可權組中某一個特定的許可權。比如,你的app想要請求READ_CONTACT許可權,對話框只會描述app想要請求設備的聯系人,如果用戶授權通過,系統會授予app所請求的該項許可權。
2.3.2 如果一個app在manifest中請求一個運行時許可權,並且這個app已經在相同的許可權組中有了另一個運行時許可權的授權,那麼系統不會彈出對話框,而是會立即授予app該項運行時許可權的授權。比如,一個app之前請求過一個READ_CONTACT的許可權並且被授權通過,之後又請求一個WRITE_CONTACT(在同一個許可權組)許可權,那麼系統會自動授予該許可權。
其實所有許可權(普通許可權、運行時許可權、用戶自定義許可權)都屬於特定的許可權組,但是只有運行時許可權的許可權組才會影響用戶體驗。
2.3.3運行時許可權組和許可權組列表
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.CAMERA
permission:android.permission.CAMERA
group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS
可以通過adb shell pm list permissions -d -g進行查看。
看到上面的dangerous permissions,會發現一個問題,好像危險許可權都是一組一組的,恩,沒錯,的確是這樣的,那麼有個問題:分組對我們的許可權機制有什麼影響嗎?的確是有影響的,如果app運行在Android 6.x的機器上,對於授權機制是這樣的。如果你申請某個危險的許可權,假設你的app早已被用戶授權了 同一組 的某個危險許可權,那麼系統會立即授權,而不需要用戶去點擊授權。比如你的app對READ_CONTACTS已經授權了,當你的app申請WRITE_CONTACTS時,系統會直接授權通過。此外,對於申請時彈出的dialog上面的文本說明也是對整個許可權組的說明,而不是單個許可權(ps:這個dialog是不能進行定製的)。不過需要注意的是,不要對許可權組過多的依賴,盡可能對每個危險許可權都進行正常流程的申請,因為在後期的版本中這個許可權組可能會產生變化。
3、相關API
3.1 在AndroidManifest文件中添加需要的許可權。
這個步驟和我們之前的開發並沒有什麼變化,試圖去申請一個沒有聲明的許可權可能會導致程序崩潰。
3.2 檢查許可權
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
}else{
//
}
這里涉及到一個API,ContextCompat.checkSelfPermission,主要用於檢測某個許可權是否已經被授予,方法返回值為PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED。當返回DENIED就需要進行申請授權了
3.3 申請授權
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
該方法是非同步的,第一個參數是Context;第二個參數是需要申請的許可權的字元串數組;第三個參數為requestCode,主要用於回調的時候檢測。可以從方法名requestPermissions以及第二個參數看出,是支持一次性申請多個許可權的,系統會通過對話框 逐一 詢問用戶是否授權。
3.4 處理許可權申請回調
@Override
(intrequestCode,
String permissions[],int[] grantResults) {
switch(requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if(grantResults.length >0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the contacts-related task you need to do.
}else{
// permission denied, boo! Disable the functionality that depends on this permission.
}
return;
}
}
}
ok,對於許可權的申請結果,首先驗證requestCode定位到你的申請,然後驗證grantResults對應於申請的結果,這里的數組對應於申請時的第二個許可權字元串數組。如果你同時申請兩個許可權,那麼grantResults的length就為2,分別記錄你兩個許可權的申請結果。如果申請成功,就可以做你的事情了!
那麼將上述幾個步驟結合到一起就是:
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
謝幕,至此有關於android6.0 以上許可權相關的內容已經詳細講完了!
❾ Android手機在開發調試時logcat不顯示輸出信息的辦法
問題表現:連接手機與電腦後,驅動安裝正確,USB調試模式打開,在DDMS中可以看到device及其進程的信息,但是logcat中就是沒有信息輸出
問題原因:一些rom默認關閉logcat
問題說明:ddms中設備名字顯示為問號不影響,即adb
get-serialno顯示為問號不影響.
解決方法:
1.需要root許可權(部分rom不需要)
2.打開logcat,並設置level,執行命令如下(android
升級之後
adb
在
platform-tools中,不在tools中)
adb
shell
echo
1
>
/sys/kernel/logger/log_main/enable
說明:將1寫入日誌開關文件,1為開,0為關
echo
2
>/sys/kernel/logger/log_main/priority
說明:將代表level的2寫入優先順序文件
3.重啟adb,如果使用eclipse,先關閉eclipse,再重啟adb,再啟動eclipse
adb
kill-server
adb
start-server
4.此時logcat應該可以工作了,如果仍舊不工作,則更新adb
android
update
adb
5.重復第三步,此時logcat應該可以工作了,如果仍舊不工作,找到個人主目錄下的android目錄,如C:Documents
and
SettingsAdministrator.android
找到這個目錄下的adb_usb.ini文件,其內容默認只有三行,全為注釋,在後面添加一行,內容為0x12d1
6.重復第三步,此時logcat應該可以工作了
❿ android sdk level 的意義
主要是因為現在的android手機大部分都是2.3以下的系統。
當然也有4.0什麼的,但是3.0以後的版本的特性都是偏向平板的,手機屏幕太小有了限制(像fragment在手機上很少用到),所以一般開發手機應用都是level10以下的(就是2.3以下),開發平板才考慮用10以上版本~~
還有哦,3.0以上版本有了更多功能是事實,但2.3以下的版本靠引入jar包也能實現同樣的效果的哦~~