728x90
반응형
지금 프로젝트에서 구분자를 받아와서 해당 구분자로 기존 리소스를 스플래시로 띄우는 것을 구현해놓았다.
https://liveforownhappiness.tistory.com/138
기획쪽에서, 스플래시 스크린의 교체를 요청해왔는데,
초기에 스플래시 스크린의 구분자와 리소스가 바뀔확률이 0에 가깝다고 개발을 구분자와 리소스로 해놓았는데
앞으로도 해당 교체가 있을것 같아서
서버에서 url 을 받아와 구현하는 것으로 변경했다.
일단 서버에서 url을 받아온뒤, 해당 url을 splash 스크린에서 세팅해주도록 변경하였다.
일단 전에 작업되어있던
RNSharedPreferences
(위에 링크 게시물 참고)
에 웹 리소스 uri 값을 native 쪽으로 내려줬다.
SplashScreen.java 코드를
public static void show(final Activity activity, final int themeResId, final boolean fullScreen, final String code, final String uri) {
if (activity == null) return;
mActivity = new WeakReference<Activity>(activity);
Context context = activity.getApplicationContext();
SharedPreferences sharedPref = context.getSharedPreferences(
"splash", Context.MODE_PRIVATE);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (!activity.isFinishing()) {
mSplashDialog = new Dialog(activity, themeResId);
mSplashDialog.setContentView(R.layout.launch_screen);
if(!String.valueOf(code).equals("X")){ //Beaver
// mSplashDialog.setContentView(R.layout.launch_screen);
imageView = (ImageView) mSplashDialog.findViewById(R.id.image);
// imageView = mSplashDialog.findViewById(R.id.imageView);
// imageView = this.findViewById(R.id.imageView);
Log.d("uri : ", uri);
// imageView.setImageURI(Uri.parse(uri));
new Thread(() -> {
try{
URL myUrl = new URL(uri);
InputStream inputStream = (InputStream)myUrl.getContent();
Drawable drawable = Drawable.createFromStream(inputStream, null);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageDrawable(drawable);
}
});
}catch(MalformedURLException ex){
//do exception handling here
// Log.e("error : ", ex);
}catch(IOException ex){
// Log.e("error : ", ex);
}
}).start();
}
// if(String.valueOf(code).equals("L")){ //LG
// mSplashDialog.setContentView(R.layout.launch_screen_lg);
// }
// if(String.valueOf(code).equals("S")){ //SK
// mSplashDialog.setContentView(R.layout.launch_screen_sk);
// }
// if(String.valueOf(code).equals("D")){ //D
// mSplashDialog.setContentView(R.layout.launch_screen_d);
// }
// if(String.valueOf(code).equals("B")){ //Beaver
// mSplashDialog.setContentView(R.layout.launch_screen);
// }
mSplashDialog.setCancelable(false);
if (fullScreen) {
setActivityAndroidP(mSplashDialog);
}
if (!mSplashDialog.isShowing()) {
mSplashDialog.show();
}
}
}
});
}
이렇게 수정해주었다.
기존 image view 에 .setImageURI(Uri.parse(uri)) 값으로 리소스를 세팅해주니
resolveUri failed on bad bitmap uri
라는 에러가 나와
new Thread(() -> {
try{
URL myUrl = new URL(uri);
InputStream inputStream = (InputStream)myUrl.getContent();
Drawable drawable = Drawable.createFromStream(inputStream, null);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageDrawable(drawable);
}
});
}catch(MalformedURLException ex){
//do exception handling here
// Log.e("error : ", ex);
}catch(IOException ex){
// Log.e("error : ", ex);
}
}).start();
해당 작업중 inputstream.에 url content() 를 담아 Drawble 로 생성했다.
해당과정에서 통신은 새로운 Thread 에서 돌려야하기때문에 new Thread 로 새로운 쓰레드를 만들어줬고
또한 UI 업데이트는 메인쓰레드에서만 하기때문에, runOnUiThread 로 imageView 업데이트를 진행했다.
이제 서버에서 이미지링크를 내려주면 해당 이미지로 스플래시를 세팅하여 보여주고 앱이 실행된다.
728x90
반응형
'ReactNative' 카테고리의 다른 글
[ React Native ] Memory Leak / Memory 초기 사용량 낮추기 (0) | 2024.12.18 |
---|---|
[ React Native ] Android debugging Deep dive ! (2) | 2024.11.30 |
[ React Native ] Dynamic splash screen 적용하기 (0) | 2024.08.12 |
[ React Native ] Kakao login 중 pod install 시 CDN: trunk URL couldn't be downloaded 발생 (0) | 2024.05.02 |
[ React Native ] react-query 에러 : bad argument type. starting with v5 only the object. (0) | 2024.04.04 |