2017-11-06 1 views
0

유튜브 앱의 공유에 인 텐트 필터를 독점적으로 등록하려고합니다.안드로이드에서 유튜브에 사용하는 인 텐트 필터 스키마

지금까지 Youtube에서 의도를 성공적으로 수신 할 수있었습니다. 문제는 필자의 의도가 충분하지 않다는 것입니다. 내 앱은 다른 앱의 다른 공유 기능 (Youtube뿐 아니라)에서 사용할 수있는 것으로 표시됩니다.

<data android:host="www.youtube.com" ... /> 
: 나는 몇 가지 질문을 검토 한

<intent-filter> 
    <action android:name="android.intent.action.SEND" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="text/plain" /> 
</intent-filter> 

문제는 답변 이러한 유형의 부정확성이있다 (가장 많은 this one 등이있다) : 내가 지금 사용하고 무엇을

입니다

data documentation에 따르면, scheme이 가장 유효하여 host이 유효합니다. 따라서 호스트를 추가하기 만하면 scheme이 없으므로 intent-filter이 Youtube 전용이 아니므로 host은 무시됩니다.

Intent intent = getIntent(); 

    Bundle bundle = intent.getExtras(); 
    for (String key : bundle.keySet()) { 
     Log.d("KEY", key); 
    } 

    //The above loop will log 
    //... D/KEY: android.intent.extra.SUBJECT 
    //... D/KEY: android.intent.extra.TEXT 

    //This is are the same keys than above, but using the available constants 
    String subject = getIntent().getStringExtra(Intent.EXTRA_SUBJECT); 
    String text = getIntent().getStringExtra(Intent.EXTRA_TEXT); 

    //The subject is the video title 
    Log.d("SUBJECT", subject); 

    //The text is the video url, example: https://youtu.be/p6qX_lg4wTc 
    Log.d("TEXT", text); 

    //Action is consistent with the intent-filter android.intent.action.SEND 
    Log.d("ACTION", intent.getAction()); 

    //This is consistent with the intent-filter data mime type text/plain 
    Log.d("TYPE", intent.getType()); 

    /* 
     This is the problem. 
     The scheme is null (that is why I'm using String value of). 
    */ 
    Log.d("scheme", String.valueOf(intent.getScheme())); 

그래서 의도에서 사용할 수있는 정보가 확인 될 때, 모든 것 같습니다 : 활동이 시작될 때

그래서 나는 intent의 가능한 방법을 사용하여이 문제를 알아 내기 위해 노력 해왔다 순서대로 이지만 스키마는이 아닙니다. 이 앱이 더 이상 선택기에서 사용할 수 없습니다, http 또는 https 작동하지 않습니다 추가

<data android:scheme="http" android:mimeType="text/plain"/> 

//I'm adding youtu.be here because is the url format in the text extra 
<data android:scheme="http" android:host="youtu.be" android:mimeType="text/plain"/> 

: 그래서,받은 내용에 근거, 나는 그것을 알아낼 일부 블라인드 시도를 했어요. 즉, host을 추가하는 다른 시도는 작동하지 않습니다.

Doe의 누구나 Youtube 공유 전용으로 intent-filter을 만드는 방법을 알고 있습니까?

PS : 나는 그것을 유튜브 URL을 일치하는지 확인하기 위해 URL을 확인할 수 있습니다 알고 있지만, 사용자 친화적하지 않는 것 SEND 일치하는 모든 츄 내 응용 프로그램을 가지고

답변

0

tldr : 당신은 유튜브 응용 프로그램에 대한 독점적 intent-filter을 할 수 없습니다, 비디오를 공유하기위한 의도는 없습니다 그것을 좁힐 수있는 모든 것.

그래서 저는 이것에 대해 정말로 집착했습니다. 알아내는 유일한 방법은 유튜브 앱 코드를 확인하는 것입니다. 나는 apk를 찾았습니다. here 그리고 this으로 디 컴파일하십시오. 나는 this file에있는 코드를 발견했다고 생각합니다. (텍스트 오류가 내 발견을 확인하는 것 같습니다.)

그럼 내 공제가 정확하다면 Youtube 앱이 intent이 아니거나 scheme이 아니거나 그 외 특정 내용이없는 것입니다. SEND 만 사용합니다.

0

이, 특정 질문에 대답하지 만 나는 당신이 원하는 것과 같은 것을 달성한다고 생각합니다.

당신은 youtube android player api library이 마찬가지로 YouTubeIntents

을 사용할 수 있습니다

:

Intent youtubeIntent = 
    YouTubeIntents.createPlayVideoIntent(getApplicationContext(), VIDEO_ID); 
startActivity(youtubeIntent); 
+0

내 앱이 Youtube에서 명시적인 의도를 수신하도록하고 싶습니다. 내 앱에서 Youtube로 보내고 싶지 않습니다. YouTube에서 인 텐트를받을 수 있습니다. 내 앱은 사용 가능하고 Intent-Filter로 등록되어 있습니다. 사용자가 유튜브 프레스에있을 때 공유 버튼 my app는 선택기에서 사용할 수 있습니다. 지금 내가해야 할 일은 SEND 암시 적 의도를 유발할 수있는 다른 앱의 코퍼에서 사용할 수 있기 때문에 Youtube에서만 사용할 수 있도록하는 것입니다. Youtube에서만 사용할 수 있도록하고 다른 필터는 사용하지 않으려면 필자의 의도 필터를보다 구체적으로 만들어야합니다. – cutiko

관련 문제