индикатор выполнения в области уведомлений не закрывается и не запускается второй индикатор выполнения - PullRequest
1 голос
/ 12 ноября 2011

в моем приложении у меня есть 4 кнопки, и когда пользователь нажимает любую кнопку, он начинает загрузку файла, и в области уведомлений отображается индикатор выполнения. Индикатор загрузки и прогресса работает нормально, но у меня есть следующие две проблемы

  1. Когда загрузка завершается, индикатор выполнения не закрывается, он остается в области уведомлений
  2. Как я уже сказал выше, у меня есть 4 кнопки, и когда нажимается первая кнопка, начинается загрузка, а когда сразу нажимаются остальные три кнопки, загрузка не происходит. Я думал, что это может начаться после завершения первой загрузки. Но ничего не происходит. Как показать все индикаторы выполнения при нажатии всех кнопок

Ниже приведен мой код (здесь я добавил только 2 кнопки), пожалуйста, помогите мне

b1 = (Button)findViewById(R.id.button1);
        b1.setOnClickListener(new View.OnClickListener() 
        {   
            @Override
            public void onClick(View v) 
            {
                i =1;
                Intent intent = new Intent(NotificationProgressTestActivity.this, UploadService.class);
                startService(intent);
            }
        });

        b2 = (Button)findViewById(R.id.button2);
        b2.setOnClickListener(new View.OnClickListener() 
        {   
            @Override
            public void onClick(View v) 
            {
                i = 2;
                Intent intent = new Intent(NotificationProgressTestActivity.this, UploadService.class);
                startService(intent);
            }
        });

Следующее - мой Uplaod Service.class

public class UploadService extends IntentService
{   
    private NotificationManager notificationManager;
    private Notification notification;
    private int progress = 10;
    private static String fileName = "folder/";
    private static URL url;
    public UploadService(String name) 
    {
        super(name);
    }
    public UploadService()
    {
        super("UploadService");
    }
    @Override
    protected void onHandleIntent(Intent intent) 
    {
        notificationManager = (NotificationManager) getApplicationContext().getSystemService(getApplicationContext().NOTIFICATION_SERVICE);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
        notification = new Notification(R.drawable.icon,"Uploading file", System.currentTimeMillis());
        notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT;
        notification.contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.upload_progress_bar);
        notification.contentIntent = contentIntent;
        notification.contentView.setProgressBar(R.id.progressBar1, 100, progress, false);
        notificationManager.notify(42, notification);
        notificationManager.notify(42, notification);
        Thread download = new Thread() 
        {
            @Override
            public void run() 
            {
                Log.e("download", "start");
                try
                {
                    for (int i = 1; i < 100; i++) 
                    {    
                        progress++;
                        notification.contentView.setProgressBar(R.id.progressBar1, 100, progress, false);
                        if(i==1)
                        {  
                            if(NotificationProgressTestActivity.i ==1 )
                            {
                                url = new URL("http://xxxxxxxxxxxxxxxx.mp4");
                            }
                            else if(NotificationProgressTestActivity.i == 2)
                            {
                                url = new URL("http://xxxxxxxxxxxxxxxx.mp4");
                            }
                            HttpURLConnection c = (HttpURLConnection) url.openConnection();
                            c.setRequestMethod("GET");
                            c.setDoOutput(true);
                            c.connect();

                            String PATH = Environment.getExternalStorageDirectory()+ "/";
                            Log.e("PATH:", PATH);
                            File file = new File(PATH);
                            if (!file.exists()) 
                            {
                                file.mkdir();
                                Log.e("destination", "created");
                            } 
                            else 
                            {
                                Log.e("destination", "exist");
                            }
                            File outputFile = new File(file, fileName);
                            FileOutputStream fos = new FileOutputStream(outputFile);

                            InputStream is = c.getInputStream();

                            byte[] buffer = new byte[10171188];
                            int len1 = 0;
                            while ((len1 = is.read(buffer)) != -1) 
                            {
                                fos.write(buffer, 0, len1);
                            }
                            fos.close();
                            is.close();
                            //  -----------------------
                            if (!outputFile.exists()) 
                            {
                                Log.e(outputFile.toString(), "not created");
                            }
                            else 
                            {
                                Log.e(outputFile.toString(), "created");
                                Log.e(outputFile.toString(), "" + outputFile.length());
                            }
                            Log.e("download", "end");
                        }
                        notificationManager.notify(42, notification);
                        try 
                        {
                            Thread.sleep(1017);
                        }
                        catch (InterruptedException e) 
                        {
                            e.printStackTrace();
                        }
                 }
            }
            catch (IOException e) 
            {
                        Log.e("log_tag", "Error: " + e);
            }
            Log.e("log_tag", "Check: ");

                // remove the notification (we're done)
            notificationManager.cancel(42);
        }
     };
        download.run();
    }

Ответы [ 2 ]

1 голос
/ 21 ноября 2011
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

1 - в этой строке выше, вторым параметром в getActivity () является requestCode, это должен быть уникальный номер для каждой кнопки.в настоящее время для обеих кнопок он равен 0.

notificationManager.notify(42, notification);

2 - в приведенной выше строке индекс уведомления, который вы передаете как 42, должен быть уникальным для обеих кнопок.в настоящее время, независимо от того, сколько кнопок вы создадите, оно никогда не покажет вам новое уведомление, потому что вы передаете 42 для каждой.он будет обновлять текущий.

, также вам может понадобиться снова посмотреть код, который вы делаете в onHandleIntent ().Есть лучшие способы сделать это.

0 голосов
/ 14 ноября 2011

Вам нужны AsyncTask и ListView. Ваша загрузка магии происходит в AsyncTask. Например, создайте массив, который указывает, какая загрузка выполняется, и ход каждой выполняемой загрузки. Теперь в вашей AsyncTask есть publishProgress -метод, который вызывает onProgressUpdate. В onProgressUpdate вы должны обновить соответствующую переменную прогресса и вызвать notifyDataSetChanged на вашем адаптере ListView. Это заставит ListView перезагрузить все данные. Наконец, в вашем ListView -Adapter вы получили метод getView, в котором вам нужно создать представление для каждой строки вашего ListView. Там вы можете решить показать ProgressBar (загрузка выполняется) или нет.

Более подробную информацию об AsyncTask можно найти здесь: http://labs.makemachine.net/2010/05/android-asynctask-example/ И еще о ListView здесь: Android: BaseAdapter как?

...