2013-12-10 1 views
-1

Я создаю локальный широковещательный приемник для уведомления о действии при запуске и завершении загрузки. У меня есть два класса, один класс DownloadFileFromURL, что я называю, чтобы загрузить определенный файл, и в ней я определил это:Менеджер локальной рассылки для загрузки файлов

Intent intent = new Intent("completeDownloadItem"); 
     // You can also include some extra data. 
     intent.putExtra("completedItem", suraName); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 

что, по моему мнению, должен послать широковещательный мой класс DownloadManager, который имеет этот код :

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.download_manager); 
     LocalBroadcastManager.getInstance(this).registerReceiver(itemReceiver, 
       new IntentFilter("addDownloadItem")); 
     LocalBroadcastManager.getInstance(this).registerReceiver(
       completeReceiever, new IntentFilter("completeDownloadItem")); 

    } 

    private BroadcastReceiver itemReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Get extra data included in the Intent 
      Songs s = (Songs) intent.getSerializableExtra("newItems"); 
      Log.d("receiver", "Got song: " + s.getTitle()); 
     } 
    }; 
    private BroadcastReceiver completeReceiever = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Get extra data included in the Intent 
      String message = intent.getStringExtra("completedItem"); 
      Log.d("receiver", "Downloaded: " + message); 
     } 
    }; 

Может ли кто-нибудь сказать мне, что мне не хватает, следует ли определить местный вещательный приемник в манифесте или что-то еще?

здесь класс DownloadFileFromURL:

public class DownloadFileFromURL extends AsyncTask<String, String, String> { 

    private Context context; 
    private ProgressDialog dialog; 
    private String reciterName, suraName; 
    private String file_url, filePath; 
    private MediaScannerConnection msc; 
    private DatabaseHelper db; 
    private int songNumber; 

    public DownloadFileFromURL(Context context, String reciterName, 
      String suraName, String fileURL, int songNumber) { 
     this.context = context; 
     this.songNumber = songNumber; 
     this.reciterName = reciterName; 
     this.suraName = suraName; 
     this.file_url = fileURL; 
     db = new DatabaseHelper(context); 
    } 

    protected void createDialog() { 
     // switch (id) { 
     // case progress_bar_type: // we set this to 0 
     dialog = new ProgressDialog(context); 
     // dialog.setMessage(context.getString(R.string.downloading) + " " 
     // + songName); 
     /* 
     * dialog.setIndeterminate(false); dialog.setMax(100); 
     */ 
     dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     dialog.setCanceledOnTouchOutside(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
     // default: 
     // return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // createDialog(); 
    } 

    /** 
    * Downloading file in background thread 
    * */ 
    @Override 
    protected String doInBackground(String... f_url) { 
     int count; 
     try { 
      URL url = new URL(file_url); 
      URLConnection conection = url.openConnection(); 
      conection.connect(); 
      // this will be useful so that you can show a tipical 0-100% 
      // progress bar 
      int lenghtOfFile = conection.getContentLength(); 

      // download the file 
      InputStream input = new BufferedInputStream(url.openStream(), 8192); 

      // Output stream 
      File appDir = new File(Environment.getExternalStorageDirectory() 
        .getPath() + "/" + context.getString(R.string.app_name)); 
      appDir.mkdirs(); 
      File albumDir = new File(appDir.getPath().toString() + "/" 
        + reciterName); 
      albumDir.mkdirs(); 
      OutputStream output = new FileOutputStream(appDir + "/" 
        + reciterName + "/" + suraName + ".mp3"); 
      byte data[] = new byte[1024]; 

      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 
       // publishing the progress.... 
       // After this onProgressUpdate will be called 
       publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 

       // writing data to file 
       output.write(data, 0, count); 
      } 

      // flushing output 
      output.flush(); 

      // closing streams 
      output.close(); 
      input.close(); 

     } catch (Exception e) { 
      Log.e("Error: ", e.getMessage()); 
     } 

     return null; 
    } 

    protected void onProgressUpdate(String... progress) { 
     // setting progress percentage 
     // dialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    @Override 
    protected void onPostExecute(String file_url) { 
     msc = new MediaScannerConnection(context, 
       new MediaScannerConnection.MediaScannerConnectionClient() { 
        @Override 
        public void onScanCompleted(String path, Uri uri) { 
         msc.disconnect(); 
        } 

        @Override 
        public void onMediaScannerConnected() { 
         msc.scanFile(filePath, null); 
        } 
       }); 
     if (!msc.isConnected()) { 
     } 
     // dialog.dismiss(); 
     db.openDB(); 
     db.addDownloaded(songNumber, reciterName); 
     db.closeDB(); 
     Intent intent = new Intent("completeDownloadItem"); 
     // You can also include some extra data. 
     intent.putExtra("completedItem", suraName); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
     Toast.makeText(context, "Sucessfully downloaded " + suraName, 
       Toast.LENGTH_SHORT).show(); 

    } 

} 

ответ

0

Нет, местные широковещательные приемники не должны быть настроены в AndroidManifest.xml. Я должен сказать, что я также немного озадачен, почему уведомление не работает; вы отлаживали код и проверяли, действительно ли широковещательная передача отправляется и правильно ли зарегистрирован приемник?

Если вы не можете заставить его работать (по какой-либо причине), рассмотрите возможность использования библиотеки, например EventBus, для ваших потребностей в межкомпонентной связи. Лично я не использовал LocalBroadcastManager в возрасте ...

+0

спасибо за совет, плохо взгляните на EventBus –

 Смежные вопросы

  • Нет связанных вопросов^_^