안드로이드

[안드로이드] APP 간의 통신, 다른 앱의 하위 액티비티 실행

IT꿈나무 2021. 9. 29. 13:21
반응형

* 안드로이드 다른 앱의 특정 Activity 실행 방법.

다른 앱의 특정 화면을 호출해서 정보를 전달하고, 그 결과를 다시 수신 받아야 하는 상황이 필요하다.

 

* 호출 부 구현.

var compName : ComponentName = 
	//ComponentName([패키지명],[액티비티 패키지명])
	ComponentName("com.jky.sig.mysigrecevactivity","com.jky.sig.mysigrecevactivity.RecevSecondActivity")
var intent : Intent = Intent(Intent.ACTION_MAIN)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
//intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
//intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
intent.putExtra("KEY", "msg value")//키, 전달하고자 하는 값.
intent.setComponent(compName);
startActivity(intent)
startActivityForResult(intent,101)

 

*수신 부 구현

- AndroidManinfest.xml

  해당하는 액티비티에 exported="true"를 허용 하고, launchMode는 intent를 resume에서 재수신 하기 위해서 적용.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jky.sig.mysigrecevactivity">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MySigRecevActivity">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".RecevSecondActivity"
            android:exported="true" //!! 외부앱에서 호출 허용.
            android:launchMode="standard"> //!! 호출시에 리줌 단계에서 인텐트 다시 읽기(Resume)
        </activity>
    </application>
</manifest>

- RecevSecondActivity.kr

  화면이 이미 생성된 단계에서는 Intent를 재수신 하기 위해서, onResume()에 아래와 같이 코드 구현

override fun onResume() {
   super.onResume()
   toastShow("onResume")
   var msg = this.intent.getStringExtra("KEY") //전송부의 키값의 value를 가져온다.
   Log.i("jky","onResume:: $msg")
   setResult(2001)
   //finish();
}

 

반응형