Android: Youtube и ACTION_SENDTO? - PullRequest
       2

Android: Youtube и ACTION_SENDTO?

1 голос
/ 26 февраля 2010

Я пишу приложение для Android, где пользователи могут загружать видео на Youtube. Мне бы хотелось, чтобы поле тега Youtube было предварительно заполнено установленным мной тегом.

Я бы также хотел, чтобы пользовательский интерфейс работал следующим образом: пользователь нажимает кнопку «Загрузить», пользователь сразу переходит к цели загрузки с YouTube (а не выбирает из «Выборщика»), поле тега для него предварительно заполнено.

Возможно ли это с помощью 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 голосов
/ 18 марта 2010

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

2 голосов
/ 27 февраля 2010

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

1 голос
/ 15 июня 2010

Итак, на самом деле это недокументированный код ... ОГРОМНОЕ СПАСИБО Эндрю Кёстеру за подсказки!

          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 голосов
/ 27 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...