서버에서 파일을 다운로드하는 서비스를 시작하려고합니다. 문제는 BroadcastReceiver를 사용하여 DownloadManager의 리턴을 관리 할 때 시작됩니다. MainActivity에 붙여 넣기를 복사하면 작동하지만 서비스에서는 오류가 발생합니다. 내 목표는 파일 (비디오)를 다운로드하고 다음 다운로드를 마친 후 첫 번째 파일 만 다운로드 한 다음 오류를 던집니다.BroadcastReceiver in service
내 클래스 : 답장을
12-20 10:17:06.859: E/ActivityThread(12324): Service com.example.downloadtest.VideosDownloader has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
12-20 10:17:06.859: E/ActivityThread(12324): android.app.IntentReceiverLeaked: Service com.example.downloadtest.VideosDownloader has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
12-20 10:17:06.859: E/ActivityThread(12324): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:756)
12-20 10:17:06.859: E/ActivityThread(12324): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:551)
12-20 10:17:06.859: E/ActivityThread(12324): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:836)
12-20 10:17:06.859: E/ActivityThread(12324): at android.app.ContextImpl.registerReceiver(ContextImpl.java:823)
12-20 10:17:06.859: E/ActivityThread(12324): at android.app.ContextImpl.registerReceiver(ContextImpl.java:817)
12-20 10:17:06.859: E/ActivityThread(12324): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
12-20 10:17:06.859: E/ActivityThread(12324): at com.example.downloadtest.VideosDownloader.onHandleIntent(VideosDownloader.java:132)
12-20 10:17:06.859: E/ActivityThread(12324): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59)
12-20 10:17:06.859: E/ActivityThread(12324): at android.os.Handler.dispatchMessage(Handler.java:99)
12-20 10:17:06.859: E/ActivityThread(12324): at android.os.Looper.loop(Looper.java:138)
12-20 10:17:06.859: E/ActivityThread(12324): at android.os.HandlerThread.run(HandlerThread.java:60)
감사 :
public class VideosDownloader extends IntentService {
public VideosDownloader() {
super("VideosDownloader");
}
private boolean download = true;
private final String SERVER_URL =
"http://127.0.0.1/42de2533d3b2776e456d62cd0fc3a101/";
private SharedPreferences preferenceManager;
final String strPref_Download_ID = "VIDEOS_DOWNLOAD_ID";
private long enqueue;
private DownloadManager manager;
private int count = 0;
private int count_max = 6;
@Override
protected void onHandleIntent(Intent intent) {
Bundle b = intent.getExtras();
preferenceManager = PreferenceManager.getDefaultSharedPreferences(this);
manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
// THROW THE FIRST TIME:
DownloadManager.Request request=new DownloadManager.Request(
Uri.parse(SERVER_URL + "video" + count + ".mp4"));
request.setDescription("");
request.setTitle("Downloading");
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, "video" + count + ".mp4");
request.setShowRunningNotification(true);
enqueue = manager.enqueue(request);
Editor PrefEdit = preferenceManager.edit();
PrefEdit.putLong(strPref_Download_ID, enqueue);
PrefEdit.commit();
count++;
BroadcastReceiver receiver = new BroadcastReceiver() {
private int progress = 0;
@Override
public void onReceive(Context context, Intent intent) {
if (count < count_max) {
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(SERVER_URL + "video" + count + ".mp4"));
request.setDescription("");
request.setTitle("Downloading...");
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, "video" + count
+ ".mp4");
request.setShowRunningNotification(true);
enqueue = manager.enqueue(request);
Editor PrefEdit = preferenceManager.edit();
PrefEdit.putLong(strPref_Download_ID, enqueue);
PrefEdit.commit();
Log.d("ENQUEUE", "ENQUEUE: " + enqueue);
count++;
}
}
};
registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
}
로그 캣, 나는 오류를 이해 해달라고.
"unregisterReceiver()에 대한 호출이 누락 되었습니까?" – Egor
등록을 취소 한 것 같습니다. 파일을 다운로드 한 후 ... AsynTask 함수의 doinbackground에서 AsyncTask를 시도해 볼 수 있습니다. 코드를 구현하면 비디오 파일을 다운로드해야합니다. – itsrajesh4uguys
그것은 작동하지 않습니다 나는 대답을 Blundell의 솔루션을 시도합니다. –