Android: Youtube и ACTION_SENDTO?

1

Я пишу приложение для 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();
            }
        }
    });
Теги:

4 ответа

2
Лучший ответ

Оказалось, что лучший способ сделать это - загрузить на свой сайт через обычный запрос POST, а затем загрузить на YouTube с сервера.

2

Он запускает выбор, потому что вы говорите ему с 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. Убедитесь, что вы проверяете, что намерение работает до его запуска.

  • 0
    Который, если он не существует на данном устройстве, взорвется до небес. И, поскольку Intents проигрывателя YouTube не является частью SDK, если проигрыватель YouTube изменит свои Intents в будущих выпусках Android, вы тоже взорветесь.
  • 0
    Я просто отвечаю на его вопрос о том, как заставить его загружать прямо на YouTube. И как и в случае любого намеренного разрешения, вы должны проверить, чтобы убедиться, что оно проверяется, прежде чем вызывать его.
Показать ещё 3 комментария
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();
          }
0

Лично я считаю, что текущая реализация - правильный ответ - просто потому, что вы хотите, чтобы YouTube не означал, что пользователь хочет YouTube.

  • 0
    Весь смысл моего приложения в том, что оно загружает видео на Youtube с установленным тегом (это проект краудсорсинга видео)
  • 0
    ... так @CommonsWare, если я собираюсь сделать это правильно (что я хотел бы сделать), что бы вы порекомендовали? Вот что мне нужно: (1) видео, загруженные с заданным тегом Youtube и (2) приложение, которое действительно простое для пользователя и не требует, чтобы он знал, что ему нужно выбрать Youtube, а затем запомнил и напечатал специальный тег. Конечно, это должно быть возможно в Android?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню