Подтвердить что ты не робот

Индикатор выполнения в панели уведомлений при загрузке изображения?

Я хочу, чтобы мое приложение загрузило изображение на веб-сервер. Эта часть работает.

Мне интересно, возможно ли каким-либо образом показать ход загрузки, введя запись в "панель уведомлений". Я вижу, что приложение Facebook делает это.

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

Спасибо за любые идеи

4b9b3361

Ответ 2

В Android, чтобы отобразить индикатор выполнения в Notification, вам просто нужно инициализировать setProgress (...) в Notification.Builder.

Обратите внимание, что в вашем случае вы, вероятно, захотите использовать флаг setOngoing (true).

Integer notificationID = 100;

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

//Set notification information:
Notification.Builder notificationBuilder = new Notification.Builder(getApplicationContext());
notificationBuilder.setOngoing(true)
                   .setContentTitle("Notification Content Title")
                   .setContentText("Notification Content Text")
                   .setProgress(100, 0, false);

//Send the notification:
Notification notification = notificationBuilder.build();
notificationManager.notify(notificationID, notification);

Затем ваша Служба должна будет сообщить о прогрессе. Предполагая, что вы сохраняете свой процентный прогресс в Integer прогресс (например, progress = 10):

//Update notification information:
notificationBuilder.setProgress(100, progress, false);

//Send the notification:
notification = notificationBuilder.build();
notificationManager.notify(notificationID, notification);

Дополнительную информацию вы можете найти на странице уведомлений API: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Progress

Ответ 3

Я не пользователь Facebook, поэтому я не знаю точно, что вы видите.

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

Ответ 4

Вы можете попробовать этот класс, это поможет вам генерировать уведомление

public class FileUploadNotification {
public static NotificationManager mNotificationManager;
static NotificationCompat.Builder builder;
static Context context;
static int NOTIFICATION_ID = 111;
static FileUploadNotification fileUploadNotification;

/*public static FileUploadNotification createInsance(Context context) {
    if(fileUploadNotification == null)
        fileUploadNotification = new FileUploadNotification(context);

    return fileUploadNotification;
}*/
public FileUploadNotification(Context context) {
    mNotificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    builder = new NotificationCompat.Builder(context);
    builder.setContentTitle("start uploading...")
            .setContentText("file name")
            .setSmallIcon(android.R.drawable.stat_sys_upload)
            .setProgress(100, 0, false)
            .setAutoCancel(false);
}

public static void updateNotification(String percent, String fileName, String contentText) {
    try {
        builder.setContentText(contentText)
                .setContentTitle(fileName)
                //.setSmallIcon(android.R.drawable.stat_sys_download)
                .setOngoing(true)
                .setContentInfo(percent + "%")
                .setProgress(100, Integer.parseInt(percent), false);

        mNotificationManager.notify(NOTIFICATION_ID, builder.build());
        if (Integer.parseInt(percent) == 100)
            deleteNotification();

    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.e("Error...Notification.", e.getMessage() + ".....");
        e.printStackTrace();
    }
}

public static void failUploadNotification(/*int percentage, String fileName*/) {
    Log.e("downloadsize", "failed notification...");

    if (builder != null) {
       /* if (percentage < 100) {*/
        builder.setContentText("Uploading Failed")
                //.setContentTitle(fileName)
                .setSmallIcon(android.R.drawable.stat_sys_upload_done)
                .setOngoing(false);
        mNotificationManager.notify(NOTIFICATION_ID, builder.build());
        /*} else {
            mNotificationManager.cancel(NOTIFICATION_ID);
            builder = null;
        }*/
    } else {
        mNotificationManager.cancel(NOTIFICATION_ID);
    }
}

public static void deleteNotification() {
    mNotificationManager.cancel(NOTIFICATION_ID);
    builder = null;
}
}

Ответ 5

Вы эту библиотеку и наслаждайтесь..! проверьте пример для более подробной информации.

Ответ 6

открытый класс loadVideo расширяет AsyncTask {

    int progress = 0;
    Notification notification;
    NotificationManager notificationManager;
    int id = 10;

    protected void onPreExecute() {

    }

    @Override
    protected Void doInBackground(Void... params) {
        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        DataInputStream inStream = null;
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead;
        int sentData = 0;               
        byte[] buffer;
        String urlString = "http://xxxxx/xxx/xxxxxx.php";
        try {
            UUID uniqueKey = UUID.randomUUID();
            fname = uniqueKey.toString();
            Log.e("UNIQUE NAME", fname);
            FileInputStream fileInputStream = new FileInputStream(new File(
                    selectedPath));
            int length = fileInputStream.available();
            URL url = new URL(urlString);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            dos = new DataOutputStream(conn.getOutputStream());
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
                    + fname + "" + lineEnd);
            dos.writeBytes(lineEnd);
            buffer = new byte[8192];
            bytesRead = 0;
            while ((bytesRead = fileInputStream.read(buffer)) > 0) {
                dos.write(buffer, 0, bytesRead);
                sentData += bytesRead;
                int progress = (int) ((sentData / (float) length) * 100);
                publishProgress(progress);
            }
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
            Log.e("Debug", "File is written");
            fileInputStream.close();
            dos.flush();
            dos.close();

        } catch (MalformedURLException ex) {
            Log.e("Debug", "error: " + ex.getMessage(), ex);
        } catch (IOException ioe) {
            Log.e("Debug", "error: " + ioe.getMessage(), ioe);
        }
        // ------------------ read the SERVER RESPONSE
        try {
            inStream = new DataInputStream(conn.getInputStream());
            String str;
            while ((str = inStream.readLine()) != null) {
                Log.e("Debug", "Server Response " + str);
            }
            inStream.close();

        } catch (IOException ioex) {
            Log.e("Debug", "error: " + ioex.getMessage(), ioex);
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {

        Intent intent = new Intent();
        final PendingIntent pendingIntent = PendingIntent.getActivity(
                getApplicationContext(), 0, intent, 0);
        notification = new Notification(R.drawable.video_upload,
                "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 = pendingIntent;
        notification.contentView.setImageViewResource(R.id.status_icon,
                R.drawable.video_upload);
        notification.contentView.setTextViewText(R.id.status_text,
                "Uploading...");
        notification.contentView.setProgressBar(R.id.progressBar1, 100,
                progress[0], false);
        getApplicationContext();
        notificationManager = (NotificationManager) getApplicationContext()
                .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(id, notification);
    }

    protected void onPostExecute(Void result) {
        Notification notification = new Notification();
        Intent intent1 = new Intent(MultiThreadActivity.this,
                MultiThreadActivity.class);
        final PendingIntent pendingIntent = PendingIntent.getActivity(
                getApplicationContext(), 0, intent1, 0);
        int icon = R.drawable.check_16; // icon from resources
        CharSequence tickerText = "Video Uploaded Successfully"; // ticker-text
        CharSequence contentTitle = getResources().getString(
                R.string.app_name); // expanded message
        // title
        CharSequence contentText = "Video Uploaded Successfully"; // expanded
                                                                    // message
        long when = System.currentTimeMillis(); // notification time
        Context context = getApplicationContext(); // application
                                                    // Context
        notification = new Notification(icon, tickerText, when);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.setLatestEventInfo(context, contentTitle, contentText,
                pendingIntent);
        String notificationService = Context.NOTIFICATION_SERVICE;
        notificationManager = (NotificationManager) context
                .getSystemService(notificationService);
        notificationManager.notify(id, notification);
    }
}

проверьте это, если это поможет u