我正在使用此方法獲取BroadCast地址數組。如何擺脫Android驗證錯誤
一些方法和使用的類不存在於舊的API中 所以我在方法的開頭添加了一個版本檢查。我試圖在Android 1.6 Emulator上運行這個檢查,並且驗證失敗錯誤。
private InetAddress[] getBroadCast() throws SocketException
{
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion < 9)
{
try {
String ipString = getWifiIp();
int loc = ipString.lastIndexOf(".");
InetAddress baddrs[] = new InetAddress[1];
baddrs[0] = new InetAddress.getByName(ipString.substring(0, loc)+".255");
return baddrs;
} catch (UnknownHostException e) {
e.printStackTrace();
return null;
}
}
else{
String bcast="";
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (InterfaceAddress address : intf.getInterfaceAddresses()) {
if(address.getBroadcast()!=null) bcast=bcast+address.getBroadcast().toString().substring(1)+"::";
}}
String[] bcastarray= bcast.split("::");
InetAddress baddrs[] = new InetAddress[bcastarray.length];
for(int i=0;i<bcastarray.length;i++)
try {
baddrs[i] = new InetAddress.getByName(bcastarray[i]);
} catch (UnknownHostException e) {
e.printStackTrace();
}
return baddrs;
}
}
這些都是僅僅從API級別4和高達拿出
10-12 11:38:22.030: W/dalvikvm(297): VFY: unable to resolve virtual method 4463: Ljava/net/NetworkInterface;.getInterfaceAddresses()Ljava/util/List;
10-12 11:38:22.030: W/dalvikvm(297): VFY: rejecting opcode 0x6e at 0x0071
10-12 11:38:22.040: W/dalvikvm(297): VFY: rejected Lhello/BroadcastSend;.getBroadCast()[Lhello/IPMAddress;
10-12 11:38:22.040: W/dalvikvm(297): Verifier rejected class Lhello/BroadcastSend;
10-12 11:38:22.040: W/dalvikvm(297): threadid=19: thread exiting with uncaught exception (group=0x4001aa28)
android.os.Build.VERSION.SDK_INT是可用的錯誤。我正在尋找解決這些問題的方法
您是否缺少'else'子句?使用您當前的代碼,無論版本如何,都會執行getInterfaceAddresses()代碼。 –
增加了else子句,但這並不妨礙驗證者拒絕1.6設備上的代碼。 – coderplus
啊,我現在看到了。這不適用於1.6。 1.6類加載器將嘗試檢查所有方法,即使您沒有實際調用它們,這也是您遇到錯誤的原因。您必須創建一個調用'getInterfaceAddress()'的包裝類,以便它根本不會被加載。 –