2017-02-08 5 views
0

다른 사용자가 링크를 클릭하면 처리 할 수있는 인 텐트 데이터가있는 내 앱이 열리도록 링크를 공유하려고합니다.공개 의도 열기

Intent i= new Intent(android.content.Intent.ACTION_SEND); 
i.setType("text/plain"); 
i.putExtra(android.content.Intent.EXTRA_SUBJECT,"Subject"); 
i.putExtra(android.content.Intent.EXTRA_TEXT, "xyz.com/blah"); 

i.putExtra("important stuff", "important stuff"); 

startActivity(Intent.createChooser(i, "Share via")); 

는 또한 매니페스트에 이것을 추가 :

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="http" /> 
    <data android:scheme="https" /> 
    <data android:host="xyz.com" /> 
</intent-filter> 

그래서 공유 텍스트를 클릭에, 내 응용 프로그램이 열립니다. 이제 important stuff에 따라 앱에서 작업하고 싶습니다. 그러나 클릭하면 (예 : Whatsapp에서) 수신 된 의도로 다음과 같이 표시됩니다.

문자열 이름 : 키 com.android.browser.application_id

값 : com.whatsapp

어떻게 다시 얻을 수 있습니다 내가 의도에 보낸 important stuff?

+0

인 텐트 엑스트라는 공유 인 텐트에만 적용되며 해당 인 텐트에 응답하는 앱에서 처리됩니다. 사용자가 링크를 클릭하면 해당 추가 기능없이 새로운 의도가 만들어집니다. 다른 응용 프로그램에서 링크를 클릭 한 후 응용 프로그램에서 해당 데이터가 필요하면 해당 응용 프로그램에서 해당 추가 기능을 보내거나 (관련 없음) URL에 관련 데이터가 있어야합니다 (https://example.com/ 키/값') 예 : –

답변

2

내가 의도적으로 보낸 중요한 것들을 어떻게 다시받을 수 있습니까?

그렇지 않습니다.

Intents에 무작위 추가 기능을 추가 할 수 있지만 다른 앱이 아무 것도하지 않을 것으로 기대하지 마십시오. 특히 the ACTION_SEND documentation에 구현 자에게 ACTION_SEND을 요구하는 내용은 무작위로 추가 작업을 수행하는 데 아무런 의미가 없으며 어떻게 든 다시 돌려받을 수 있습니다.

마찬가지로 새 HTTP 헤더를 만들 수는 있지만 웹 서버가주의를 기울여 응답 할 때마다 다시 보내지 않아도됩니다.

대신 xyz.com/important/stuff (또는 가능 xyz.com/blah?important=stuff)와 xyz.com/blah을 교체하고 활동을 시작하는 데 사용되는 Uri에서 데이터를 얻을. 활동의 onCreate() 메소드에서 Uri을 통해 getIntent().getData()을 가져 오거나 (의 getData()onNewIntent()으로 전달됨) (매니 페스트 설정 및이 활동의 ​​기존 인스턴스가 이미 존재하는지 여부에 따라 다름).

+0

고마워! 'getData'는 제가 찾고있는 것이 었습니다. –