Я пишу приложение для Android, где пользователи могут загружать видео на Youtube. Я хотел бы, чтобы поле тега Youtube было предварительно заполнено тегом, который я установил.
Я бы также хотел, чтобы пользовательский интерфейс работал следующим образом: пользователь нажимает кнопку "Загрузить", пользователь переходит прямо к намерению загрузки YouTube (а не выбирает из Chooser), поле тега предварительно заполняется для них.
Возможно ли это с помощью ACTION_SENDTO?
В настоящее время у меня есть этот код, который просто запускает Chooser, который действительно не то, что я хочу:
btnUpload.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//uploadToYouTube();
//videoUpload();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("video/3gpp");
intent.putExtra(Intent.EXTRA_STREAM, videoURI);
try {
startActivity(Intent.createChooser(intent,
"Upload video via:"));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Recorder.this, "No way to share!",
Toast.LENGTH_SHORT).show();
}
}
});
Оказалось, что лучший способ сделать это - загрузить на свой сайт через обычный запрос POST, а затем загрузить на YouTube с сервера.
Он запускает выбор, потому что вы говорите ему с Intent.createChooser
. Вам нужно напрямую указать действие YouTube.
При исследовании выглядит, что MediaUploader
обрабатывает загрузку YouTube. Я просмотрел его AndroidManifest.xml, и я предполагаю, что намерение, которое вы хотите запустить, следующее:
com.google.android.apps.uploader.UploaderApplication.youtube.YouTubeSettingsActivity
Вот интересные части AndroidManifest.xml.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser"
android:versionName="1.4.13"
package="com.google.android.apps.uploader">
<uses-sdk android:minSdkVersion="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser" />
<application
android:label="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser"
android:name=".UploaderApplication"
android:debuggable="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser">
<activity
android:theme="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser"
android:name=".youtube.YouTubeSettingsActivity"
android:excludeFromRecents="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser"
android:configChanges="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser">
<intent-filter
android:label="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser"
android:icon="com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser">
<data android:mimeType="video/*" />
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.ALTERNATIVE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Вы заметите, что intent-filter
для YouTubeSettingsActivity
получает действие SEND
, поэтому, скорее всего, мы хотим.
Как сообщает CommonsWare, это зависит от того, что телефон поддерживает YouTube, и может сломаться. Это было взято из моего образа системы 2.0.1. Убедитесь, что вы проверяете, что намерение работает до его запуска.
Итак, на самом деле это недокументированный код... БОЛЬШОЙ СПАСИБО Эндрю Кестеру за ваши подсказки!
Intent intent = new Intent(Intent.ACTION_SEND,uri); intent.setType("video/3gpp"); intent.setComponent(new ComponentName( "com.google.android.apps.uploader", "com.google.android.apps.uploader.youtube.YouTubeSettingsActivity") ); intent.setFlags(0x3000000); // ParcelFileDescriptor.MODE_READ_WRITE ?!? intent.putExtra(Intent.EXTRA_STREAM,uri); try { startActivity(intent); // // startActivityForResult(intent,23); //only returns OK... how to get URL?! } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getApplicationContext(),"No way to share",Toast.LENGTH_SHORT).show(); }
Лично я считаю, что текущая реализация - правильный ответ - просто потому, что вы хотите, чтобы YouTube не означал, что пользователь хочет YouTube.