1

Android の GCS にファイルをアップロードするためにこのコードを試しました。このコードは完全に実行され、バケットにファイルをアップロードしています。ここで、一時停止、再開、インターネットのオン/オフ処理の進行状況を確認したいと思います。私はインターネットでたくさん検索しましたが、完璧な解決策は見つかりませんでした。

コード

CloudStorage.uploadFile("upload-recording", "/storage/sdcard0/Download/images.jpg",this,file);

public static void uploadFile(String bucketName, String filePath,Context context,File file_use)
            throws Exception {

        this_context = context;
        this_file = file_use;
        Storage storage = getStorage();

        StorageObject object = new StorageObject();
        object.setBucket(bucketName);

        File file = new File(filePath);

        InputStream stream = new FileInputStream(file);
        try {
            String contentType = URLConnection
                    .guessContentTypeFromStream(stream);
            InputStreamContent content = new InputStreamContent(contentType,
                    stream);

            Storage.Objects.Insert insert = storage.objects().insert(
                    bucketName, null, content);
            insert.setName(file.getName());

            insert.execute();
        } finally {
            stream.close();
        }
    }
4

1 に答える 1

2

CustomInputStream を試して、読み取ったデータの Status を取得し、 service を使用して表示します。

public class ProgressNotifyingInputStream extends InputStream {
    private InputStream wrappedStream;
    private int count = 0;
    private int totalSize;
    File file;
    public ProgressNotifyingInputStream(File file)
     {
       this.file=file;
      }
    /**
     * Creates a new notifying outputstream which wraps an existing one.
     * When you write to this stream the callback will be notified each time when
     * updateAfterNumberBytes is written.
     * 
     * @param stream the outputstream to be wrapped
     * @param totalSize the totalsize that will get written to the stream
     */



     wrappedStream = new FileInputStream(file);

    public ProgressNotifyingInputStream(InputStream stream, int totalSize) {
        if(stream==null) {
            throw new NullPointerException();
        }
        if(totalSize == 0) {
            throw new IllegalArgumentException("totalSize argument cannot be zero");
        }
        this.wrappedStream = stream;
        this.totalSize = totalSize;
    }


    @Override
    public int read() throws IOException {
        count++;
        return wrappedStream.read();
    }

    /**
     * Get progress from 0 to 100
     * @return
     */
    public int getProgress() {
        return count * 100 / totalSize;
    }

}

そして、私はあなたのコードを呼び出すだけです

InputStream stream=new ProgressNotifyingInputStream (file);
于 2015-09-19T09:57:09.307 に答える