اولین کار من در بازار و مایکت منتشر شد
در بازار منتشر شد لینک
در مایکت منتشر شد لینک
این اپلیکیشن هر روز والپیپر گوشی را به طور تصادفی عوض میکند .
در روزهای خاص مذهبی مثل ولادت یا شهادت ائمه اطهار تصویر مناسبتی آن روز در والپیپر گوشی قرار میگیرد.
در روزهای معمولی در صورتی که تصویر والپیپر را نمی پسندید روی آیکون برنامه کلیک کنید تا تصویر جدیدی برای شما جایگزین شود.
screenshot از روزهای عادی سال

screenshot هایی از روزهای خاص


دوستان بازار پیغام داده برنامه force close میده .این درحالیه که خودم کلی تست کردم بچه های اینجا هم نصب کردن مشکلی نداشته .به نظرتون ایراد کارکجاست؟ممکنه توی آپلود فایل مشکل بوده؟ ویا علت دیگه ای داره؟
ممنون لطف کردید .من listener رو این طوری تعریف کردم
public static void myinitialize() {
listener = new OnDownloadCompleteListener() {
public void onDownloadComplete(String url, String localPath) {
DownloadManager.copyFile(localPath, localPath.replace("/temp/", "/final/"));
new File(localPath).delete();
Log.i("LOG", "download");
mBitmap = BitmapFactory.decodeFile(bitaddress);
bitmap = Bitmap.createScaledBitmap(mBitmap, width, height, true);
wallpaperManager.suggestDesiredDimensions(width, height);
Log.i("LOG", bitaddress);
try {
wallpaperManager.setBitmap(bitmap);
Log.i("LOG", "ok");
}
catch (IOException e) {
e.printStackTrace();
}
}
};
}
توی کلاس G هم این دستور رو دادم
myActivity.myinitialize();
برای دستور دانلود هم اینو نوشتم
if ( !new File(G.DIR_FINAL + "/" + filename).exists()) {
Log.i("LOG", "there is not " + filename);
FileDownloader.download("***" + filename, G.DIR_TEMP + filename, listener);
توی فایل دانلودر هم :
if (listener != null) {
G.HANDLER.post(new Runnable() {
public void run() {
listener.onDownloadComplete(downloadPath, filepath);
}
});
}
این کل فایل دانلودر :
public static void download(final String downloadPath, final String filepath, final OnDownloadCompleteListener listener) {
Thread thread = new Thread(new Runnable() {
public void run() {
try {
URL url = new URL(downloadPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
Log.i("LOG", "Connecting.....");
File file = new File(filepath);
if (file.exists()) {
file.delete();
}
FileOutputStream outputStream = new FileOutputStream(filepath);
InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[G.DOWNLOAD_BUFFER_SIZE];
int len = 0;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
if (listener != null) {
G.HANDLER.post(new Runnable() {
public void run() {
listener.onDownloadComplete(downloadPath, filepath);
}
});
}
outputStream.close();
}
catch (MalformedURLException e) {
if (isNetworkConnected() == false) {
G.HANDLER.post(new Runnable() {
public void run() {
Toast.makeText(G.context, "There is no connection or is slow please try later", Toast.LENGTH_LONG).show();
}
});
}
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
Log.i("LOG", "No Connection");
}
}
});
thread.start();
}
private static boolean isNetworkConnected() {
NetworkInfo networkInfo = G.connectivityManager.getActiveNetworkInfo();
if (networkInfo == null) {
return false;
} else
return true;
}
}
شما در هرباری که چند بایت دانلود میشه دارید Listener رو کال میکنید!
باید کدتون رو به صورت زیر تغییر بدید:
percent = (int) (100.0f * (float) downloadedSize / totalSize);
if (listener != null && percent == 100) {
final int finalDownloadedSize = downloadedSize;
G.HANDLER.post(new Runnable() {
@Override
public void run() {
listener.onProgressDownload(percent, finalDownloadedSize, totalSize);
}
});
}
دقیقا مانند کد استاد فقط من && percent == 100 رو به شرط اضافه کردم. همه اینها باید در حلقه while نوشته بشن.
یعنی این طوری:
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
percent = (int) (100.0f * (float) downloadedSize / totalSize);
if (listener != null && percent == 100) {
final int finalDownloadedSize = downloadedSize;
G.HANDLER.post(new Runnable() {
public void run() {
listener.onProgressDownload(percent, finalDownloadedSize, totalSize);
}
});
}
}
outputStream.close();
onDownloadComplate درسته یا نه؟
public interface OnDownloadCompleteListener {
public void onDownloadComplete(String url, String localPath, int downloadPercent);
}
درون filedownloader :
final float downloadPercent = 100.0f * (float) downloadedSize / fileSize;
if (listener != null && downloadPercent == 100) {
final int finalDownloadedSize = downloadedSize;
G.HANDLER.post(new Runnable() {
public void run() {
listener.onDownloadComplete(downloadPath, filepath, finalDownloadedSize);
}
});
}
نه، ببینید شما دانلود رو انجام میدید، زمانی که 100% شد
final int finalDownloadedSize = downloadedSize;
G.HANDLER.post(newRunnable(){
publicvoid run(){
listener.onProgressDownload(String imageId,String localPath);}
رو ارسال میکنید، در دیتابیستون باید یک imageId داشته باشید که بعدا بتونید تشخیص بدید این عکس کدوم عکسه، این عکس زمانی که دانلود میشه یک آدرس داره که همون localpath هست که بعدا میگید عکس رو از این آدرس در imageView ست کن.
حالا توی listener.onProgressDownload که در اکتیویتی نوشتید، عکس رو تغییر بدید (میتونه با انیمیشن و ... باشه).
بدون استفاده از listener:
if(percent ==100){
changeImage(String imageId,String localPath);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .