0

Я много искал об этом, но ничего не нашел. Моя цель - открыть все URL-адреса с видео-файлом (выбранным из браузера). Обычно, если все URL-адрес закончился расширением файла видео IE: www.example.com/wow.mp4 я мог бы просто использовать этот фильтр намерений моего манифест:Открытие видеороликов в моем приложении

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <data android:scheme="http"/> 
    <data android:scheme="https"/> 
    <data android:mimeType="video/*"> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
</intent-filter> 

Но это не везде, некоторые URL, начинают как:

http://www.videoweed.es/mobile/....17da9f11345a424f02a5 

, а затем перенаправить на нужную ссылку. Я хотел бы знать, как я могу перехватить эти URL-адреса для видео с помощью фильтра Intent. MXPlayer выполняет эту функцию.

ответ

1

Вам нужно вызвать модуль HTTPConnection, чтобы получить тип mime, а затем использовать тип mime для запуска активности. Вы можете обратиться к нижеприведенному разделу кода, чтобы получить URL-адрес типа mime.

Вы можете обратиться к Android - Detect URL mime type

import java.net.URL; 
import java.net.URLConnection; 

public static String getMimeType(String url) 
{ 
    String mimeType = null; 

    // this is to handle call from main thread 
    StrictMode.ThreadPolicy prviousThreadPolicy = StrictMode.getThreadPolicy(); 

    // temporary allow network access main thread 
    // in order to get mime type from content-type 

    StrictMode.ThreadPolicy permitAllPolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(permitAllPolicy); 

    try 
    { 
     URLConnection connection = new URL(url).openConnection(); 
     connection.setConnectTimeout(150); 
     connection.setReadTimeout(150); 
     mimeType = connection.getContentType(); 
     Log.i("", "mimeType from content-type "+ mimeType); 
    } 
    catch (Exception ignored) 
    { 
    } 
    finally 
    { 
     // restore main thread's default network access policy 
     StrictMode.setThreadPolicy(prviousThreadPolicy); 
    } 

    if(mimeType == null) 
    { 
     // Our B plan: guessing from from url 
     try 
     { 
      mimeType = URLConnection.guessContentTypeFromName(url); 
     } 
     catch (Exception ignored) 
     { 
     } 
     Log.i("", "mimeType guessed from url "+ mimeType); 
    } 
    return mimeType; 
} 
+0

Спасибо, но это не полное решение. Этот код будет запускаться, как только мое приложение будет выбрано для URL-адреса, либо из получателя, либо из самого приложения, и если mimeType не является видео, тогда мой будет открыт, но не сможет справиться с намерением. Любая идея, как достичь этого через манифест в одиночку? – Aashir

+0

Я думаю, что теперь это тема рамки, вы должны обработать ее до запуска активности, поэтому для поддержки такой функциональности потребуется изменение структуры. –

+0

Подумайте об этом так, я хочу, чтобы мое приложение находилось в диалоговом окне диалога выбора, I.E для воспроизведения видео. Поэтому я не могу позволить пользователю запустить мое приложение только для того, чтобы узнать, что он выбрал неправильную ссылку, и мое приложение не может ничего с этим поделать. – Aashir