2014-02-28 1 views
0

내 활동에 데이터를 전달하려고하지만 불행히도 여전히 실패합니다. 달성하고자하는 것은 파일 브라우저에서 파일을 선택하여 공유하고 데이터를 내 활동에 전달하는 것입니다. 나는 내 파일 공유에서 파일을 선택하면"공유"화면을 사용하여 활동에 데이터 전달

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity); 
    Intent intent = getIntent(); 
    Uri data = intent.getData(); 
    if (data != null) { 
     // process the data 
    } else { 
     // no data received 
    } 
} 

: 내가 데이터를 얻으려고 내 자바 파일 내부

<activity android:name=".MyActivity" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:mimeType="*/*"/> 
    </intent-filter>    
</activity> 

: 내 매니페스트 내부

가 나는 텐트 필터를 추가 그것, 내 애플 리케이션이 목록에 표시됩니다, 그것을 클릭하면 내 활동을 시작하지만, intent.getData(); 항상 null을 반환합니다. 내가 누락 된 것이 있습니까? 감사.

답변

0

다음 예제에서 데이터를 얻을 수 있습니다.

요소가있는 요소를 사용하십시오. 예를 들어, twitter.com에 대한 모든 링크를 처리하기 위해, 당신은 당신의 AndroidManifest.xml에 내부에이를 넣어 것 : 사용자가 브라우저 트위터에 링크를 클릭 할 때

<intent-filter> 
    <data android:scheme="http" android:host="twitter.com"/> 
    <action android:name="android.intent.action.VIEW" /> 
</intent-filter> 

을 그리고, 그들은 것 브라우저 나 응용 프로그램과 같은 작업을 완료하기 위해 사용할 응용 프로그램을 물었습니다. 물론

, 당신이 당신의 웹 사이트와 응용 프로그램 사이의 긴밀한 통합을 제공하려는 경우, 당신은 당신의 자신의 방식을 정의 할 수 있습니다 :

:

<intent-filter> 
    <data android:scheme="my.special.scheme" /> 
    <action android:name="android.intent.action.VIEW" /> 
</intent-filter> 

그런 다음 웹 응용 프로그램에서 당신과 같은 링크를 넣을 수 있습니다

<a href="my.special.scheme://other/parameters/here">

사용자가 클릭하면 앱이 자동으로 실행됩니다 (아마 my.special.scheme : // uris 유형을 처리 할 수있는 유일한 앱이기 때문일 수 있습니다). 이 단점은 사용자가 앱을 설치하지 않으면 불쾌한 오류가 발생한다는 것입니다. 그리고 확인할 방법이 있는지 확신 할 수 없습니다.

편집 : 질문에 대답하려면 Uri 객체를 반환하는 getIntent(). getData()를 사용할 수 있습니다. 그런 다음 Uri. * 메서드를 사용하여 필요한 데이터를 추출 할 수 있습니다.) (

strong textUri data = getIntent().getData(); 
String scheme = data.getScheme(); // "http" 
String host = data.getHost(); // "twitter.com" 
List<String> params = data.getPathSegments(); 
String first = params.get(0); // "status" 
String second = params.get(1); // "1234" 

당신은 당신의 활동에 어디 위의 작업을 수행 할 수 있습니다,하지만 당신은 아마에서 onCreate에서 그것을하고 싶은거야 : 예를 들어, 사용자가 http://twitter.com/status/1234에 대한 링크를 클릭 가정 해 봅시다. params.size()를 사용하여 Uri의 경로 세그먼트 수인 enter code here을 얻을 수도 있습니다. javadoc 또는 안드로이드 개발자 웹 사이트에서 특정 부분을 추출하는 데 사용할 수있는 다른 Uri 메소드를 찾으십시오.

Launch custom android application from android browser

+0

감사합니다. 그러나 이것이 도움이 될 것이라고 생각하지 않습니다. 브라우저에서 클릭 한 링크를 처리 할 필요가 없습니다. 내 SD 카드의 파일을 활동에 전달해야합니다 (실제로 파일 경로가 해당 작업을 수행합니다). 액션을 android.action.VIEW로 변경하면 내 앱이 '공유를 통한 공유'화면에 더 이상 표시되지 않습니다. 내 문제는 그 getIntent(). getData(); null를 돌려줍니다. – Dusan