Java tutorial
// Copyright 2015 The Vanadium Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package io.v.x.media_sharing; import android.app.Activity; import android.net.Uri; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.InputStream; import io.v.v23.OptionDefs; import io.v.v23.Options; import io.v.v23.context.VContext; import io.v.v23.vdl.TypedClientStream; import io.v.v23.verror.VException; /** * Background task to stream media without blocking the UI thread. */ public class SendMediaTask extends AsyncTask<Void, Void, Void> { private static final String TAG = "SendMediaTask"; Activity activity; VContext vContext; String targetName; Uri uri; String mimeType; public SendMediaTask(Activity activity, VContext vContext, String targetName, Uri uri, String mimeType) { this.activity = activity; this.vContext = vContext; this.targetName = targetName; this.uri = uri; this.mimeType = mimeType; } @Override protected Void doInBackground(Void... params) { try { InputStream is = activity.getContentResolver().openInputStream(uri); MediaSharingClient client = MediaSharingClientFactory.getMediaSharingClient(targetName); // TODO(bprosnitz) Remove this option when possible. It is allows the app to connect // without having the proper blessings. Options opts = new Options(); opts.set(OptionDefs.SKIP_SERVER_ENDPOINT_AUTHORIZATION, true); String mimeType = activity.getIntent().getType(); TypedClientStream<byte[], Void, Void> stream = client.displayBytes(vContext, mimeType, opts); ClientByteOutputStream os = new ClientByteOutputStream(stream); IOUtils.copy(is, os); stream.finish(); Log.i(TAG, activity.getString(R.string.share_messsage_success)); activity.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(activity, R.string.share_messsage_success, Toast.LENGTH_LONG).show(); } }); return null; } catch (IOException | VException e) { final String errorMessage = activity.getString(R.string.share_messsage_error) + ": " + e.toString(); Log.e(TAG, errorMessage); activity.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(activity, errorMessage, Toast.LENGTH_LONG).show(); } }); throw new RuntimeException(e); } } }