例如使用 TelephonyManager 查詢 IEMI CODE 等需求,
就以取得 IMEI 為例,在 Android 中是使用 getDeviceId() 這個 API
public String getIMEI()
{
final TelephonyManager telephonyManager = getTelephonyManager();
if(telephonyManager == null)
{
return null;
}
final String imeiCode = telephonyManager.getDeviceId();
return (imeiCode!=null)? imeiCode : "Android_Emulator";
}
private TelephonyManager getTelephonyManager()
{
if(telephonyManager == null)
{
telephonyManager = (TelephonyManager)_service.getSystemService(Context.TELEPHONY_SERVICE);
}
return telephonyManager;
}
在一個空的 Android 專案中若這段 code 放在 try catch 中,
會發生跳到 catch block 的狀況,TRACE 後會發現是在 getDeviceID() 時發生錯誤,
這是因為部份 class 中的部份 method 在使用時必須擁有相關的權限,
試試在 Android Developers 中找到 TelephyManager,再找到 getDeviceId()
http://developer.android.com/reference/android/telephony/TelephonyManager.html
仔細看過後發現底下的確寫著:Requires Permission: READ_PHONE_STATE
再找找可以發現還有其他的特殊 method 需要用到特定的權限,
只要依照 Developers 上找到的資料,在專案中的 AndroidManifest.xml 加入即可,
舉例幾個常用的權限。
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
沒有留言:
張貼留言