일모도원(日暮途遠) 개발자

[Android] 웹브라우저에서 텍스트 선택후 앱 열기 본문

안드로이드 개발/안드로이드

[Android] 웹브라우저에서 텍스트 선택후 앱 열기

달님개발자 2023. 2. 13. 11:48

웹브라우저에서 텍스트를 선택한후 메뉴에서 내가 만들고 있는 앱을 선택하면, 앱으로 선택한 텍스트를 가져와서 원하는 뷰를 보여주고 싶다.

 

"GIS"문구를 선택한후 "아라ICT"를 선택.

 

아라ICT앱을 열고 선택한 문구"GIS"가 포함된 용어 리스트를 보여줌.

 


 

manifest파일에서 선택된 용어 리스트를 보여줄 액티비티에 intent filter를 걸어준다. PROCESS_TEXT

웹 브라우저에서 텍스트선택시 메뉴에 보여지는 "아라ICT"는 label에서 정해진다. 없으면 앱 이름을 사용하고, 원하면 다른 이름으로 적어줘도 된다.

android:label="@string/app_name"

<activity
    android:name="com.dalread.activity.MainHomeActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait"
    android:exported="true"
    android:label="@string/app_name"
    android:windowSoftInputMode="stateAlwaysHidden|adjustPan|adjustResize">

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

 

해당 액티비티의 onCreate나 onResume등에서 선택된 텍스트가 들어왔을때 처리를 해준다.

(내 앱의 경우에는 프레그먼트에서 용어 리스트를 보여주는데 onCreate에서는 잘 안되어서 난 onResume에서 처리했다.)

Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_PROCESS_TEXT.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            String str = (String) intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
            if (str != null) {
                //선택한 문구를 한번 사용하고, 초기화 시킨다.
                intent.removeExtra(Intent.EXTRA_PROCESS_TEXT); //or getIntent().getExtras().clear();
                //처리하고 싶은 로직을 여기에 넣는다.
            }
        }
    }
}

그리고 스플래쉬 뷰는 생략한다. (빨리 용어 리스트를 보여줄려구...)

public class SplashActivity extends BaseSplashActivity implements BaseInit {
    protected long getSplashTime() {
        long splashTime = Constant.SPLASH_TIME;
        if (getIntent().hasExtra(getIntent().EXTRA_PROCESS_TEXT)) {
            //skip splash screen.
            splashTime = 0L;
        }
        return splashTime;
    }
}