ネットワークにアクセスできるかどうかをチェックするコード(追記)

private static boolean checkNetworkByHttp() {
BufferedReader br = null;
boolean result = false;
URL rssurl = null;
try {
rssurl = new URL(”http://www.adown.biz”);
br = new BufferedReader(new InputStreamReader(rssurl.openStream(),
“UTF-8″));
String buf = “”;
while ((buf = br.readLine()) != null) {
result = true;
break;
}
;
} catch (Exception e) {
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
}
}
return result;
}

前回の投稿のコードではisReacheableの挙動が変(いつもfalseとかtrueとか)になって、実用時に問題が起きたのでHttpでチェックするコードを書きました。実行速度的にはイマイチですがまあしかたないです。

private static boolean checkNetworkByHttp() {

BufferedReader br = null;

boolean result = false;

URL rssurl = null;

try {

rssurl = new URL(”http://どこかIPで指定した方が早いかも”);

br = new BufferedReader(new InputStreamReader(rssurl.openStream(),

“UTF-8″));

String buf = “”;

while ((buf = br.readLine()) != null) {

result = true;

break;

};

} catch (Exception e) {

} finally {

if (br != null)

try {

br.close();

} catch (IOException e) {

}

}

return result;

}

ネットワークにアクセスできるかどうかをチェックするコード

andoridでネットワークが生きてるかどうかを調べる方法はありますが、時にIPだけ取れて外にでれない状態(有料のAPをつかんじゃった場合とか)だと、普通に調べただけではうまくいきません。そんなときのチェック用コードです。
Proxyとかが刺さってる場合で、ICMPはOKだけどHTTPはだめな場合はもう少しまじめに書かないといけませんが、それはそれで遅いコードになるのでたいていはこれでいけると思います。

public static boolean checkNetwork(Context ctx) {
ConnectivityManager cm = (ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
if (!cm.getActiveNetworkInfo().isConnected()) {
messageDialog(ctx, R.string.mnoconnectiontitle,
R.string.mnoconnection);
return false;
}
} else {
messageDialog(ctx, R.string.mnoconnectiontitle,
R.string.mnoconnection);
return false;
}
String addressText = “www.adown.biz”;
InetAddress address;
try {
address = InetAddress.getByName(addressText);
// Reachability のチェック ICMP が使用される
return address.isReachable(2000);
} catch (UnknownHostException e) {
return false;
} catch (Exception e) {
// TODO 自動生成された catch ブロック
return false;
}
}

//外に出れたらtrue

public static boolean checkNetwork(Context ctx) {

ConnectivityManager cm = (ConnectivityManager) ctx

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo ni = cm.getActiveNetworkInfo();

if (ni != null) {

if (!cm.getActiveNetworkInfo().isConnected()) {

return false;

}

} else {

return false;

}

String addressText = “www.google.com”; //ここは自社サイトとかにしましょう

InetAddress address;

try {

address = InetAddress.getByName(addressText);

return address.isReachable(2000);

} catch (UnknownHostException e) {

return false;

} catch (Exception e) {

return false;

}

}

ファイルとメモリーの空き容量を調べるコードです

private void updateMemorySize() {
String status = Environment.getExternalStorageState();

if (status.equals(Environment.MEDIA_MOUNTED)) {
try {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();

// free/total memory in the SD card
tvFlashCardCapacity.setText(”SD card: ”
+ formatMemorySize(availableBlocks * blockSize) + ” / ”
+ formatMemorySize(totalBlocks * blockSize));
} catch (IllegalArgumentException e) {
// this can occur if the SD card is removed, but we haven’t
// received the
// ACTION_MEDIA_REMOVED Intent yet.
status = Environment.MEDIA_REMOVED;
}
} else {
tvFlashCardCapacity.setText(”SD card: unavailable”);
}

File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();

// free/total memory in the internal memory
tvInternalMemoryCapacity.setText(”Internal memory: ”
+ formatMemorySize(availableBlocks * blockSize) + ” / ”
+ formatMemorySize(totalBlocks * blockSize));
}

admob買収!

やっぱりGoogleが買っちゃいましたね。しかし750億とは・・・

Eclipsがおかしくなったらあわてずに。。。

Adownのバグを直して、さあリリースしようとしてExport wizardでサインをしようとしたら、2つめの画面(aliasのパスワードを入れるところ)で、正しいパスワードを入れてるのに次へを押しても、次に行かなくなっちゃいました。

思い当たる節はSDKを2.0対応にしたこと・・・ま、まさか!

確かに2.0にしてからサインしたことなかったよなと思いながら、とりあえずEclipsを再起動したり、Windowsを再起動したりしましたがだめです。

キーファイルの破損も疑ったのですが、別の1.5r3から上げていない環境でコンパイル&サインができたのでとりあえず一安心。

さらに別の2.0環境ではちゃんとサインできることも確認。てことはこいつだけなんかおかしくなってること確定。
一番最初から使ってたからJREのバージョンとかが2.0SDKのお気に召さなかったのかなと思って、JREを最新に上げて再トライ・・・だめです。じゃあADK&SDKを再インストール・・・だめです。おいおい!!

んーと困ったあげく、”いいや、Eclips入れ直しても15分だし。”ということでEclipsから入れ直しました。
当然(?)ちゃんとサインできるようになりました。

念のため(??)元のEclipsでサインしてみると・・・やっぱりだめです。
’やっぱなんかよれてるんだな。よしよし。今度の勉強会でネタにしよう。’と思った刹那、ふと’eclipse.exe -clean.cmdしたらどうなんだろ?’という考えが頭をよぎりました。

やってみました・・・動きました、サイン。

 今日の教訓: Eclipsが変な挙動をしたら、まずeclipse.exe -clean.cmd!あわててEclips入れ直したりJavaをバージョンアップしない。おちつけ自分。