AlarmManager を使用してブロードキャスト レシーバーで自動 FTP 転送を実行しようとしています。私の HTC ではうまく機能していますが、友人の Galaxy S3 ではクラッシュしています。シミュレートするとLogCatに「メインスレッドのネットワーク」例外があるため、ICSの問題のようです。
AsyncTask を使用する必要があるようです。ブロードキャストレシーバーに AsyncTask を実装することは可能ですか? 私はそれについてウェブ上で何も見つけることができません。誰か知っていますか?
FTP ダウンロードのメソッドの関連部分は次のとおりです。
public void getFTP(Context context)
{
//
// Download config.txt file from server
//
FTPClient ftpClient = new FTPClient();
try{
ftpClient.connect(InetAddress.getByName(ipAddress));
ftpClient.enterLocalPassiveMode();
ftpClient.login(user, pass);
ftpClient.setFileType(FTP.ASCII_FILE_TYPE);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/sdcard/config.txt"),8*1024);
boolean status=ftpClient.retrieveFile("config.txt", bos);
if(status){
//Toast toast = Toast.makeText(context, "Downloaded config.txt!", Toast.LENGTH_SHORT);
//toast.show();
}
else {
Toast toast = Toast.makeText(context, "Cannot download config.txt!", Toast.LENGTH_SHORT);
toast.show();
return;
}
bos.flush();
bos.close();
ftpClient.logout();
ftpClient.disconnect();
}
catch (IOException e){
Toast.makeText(context,"Connection error!" , Toast.LENGTH_LONG).show();
return;
}
を使用して onReceive() メソッドから呼び出されます
getFTP(context);