728x90
정말 정말 이것 때문에 너무 생고생을 했는데
완전 어이없게 해결됐다
기존코드
public class MainActivity extends AppCompatActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); // allow the js
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportMultipleWindows(true);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("웹뷰 URL");
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
}
}
해결
1. WebViewClient 이너클래스 생성

해당 코드 위에 마우스를 올리면(오류 표시가 안뜬다면 WebViewClient import를 제거한다)

import class를 누르지 말고 More actions을 눌린다

제일 마지막 Create inner class 'WebViewClient' 클릭
그럼 아래의 사진처럼 코드가 자동생성된다

2. shouldOverrideUrlLoading 오버라이딩하기
아래의 코드를 WebViewClient 클래스 안에 붙여넣기 한다
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("intent://") || url.startsWith("tel:")) {
try {
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
Intent existPackage = getPackageManager().getLaunchIntentForPackage(intent.getPackage());
//앱이 설지되어 있으면
if (existPackage != null) {
startActivity(intent);
//앱이 설치되어 있지 않으면 마켓으로 이동
} else {
Intent marketIntent = new Intent(Intent.ACTION_VIEW);
marketIntent.setData(Uri.parse("market://details?id="+intent.getPackage()));
try {
startActivity(marketIntent);
} catch (ActivityNotFoundException e){
Intent webIntent = new Intent(Intent.ACTION_VIEW);
webIntent.setData(Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
startActivity(webIntent);
}
}
return true;
}catch (Exception e) {
e.printStackTrace();
}
} else if (url.startsWith("market://")) {
try {
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
Intent marketIntent = new Intent(Intent.ACTION_VIEW);
marketIntent.setData(Uri.parse("market://details?id="+intent.getPackage()));
try {
startActivity(marketIntent);
} catch (ActivityNotFoundException e){
Intent webIntent = new Intent(Intent.ACTION_VIEW);
webIntent.setData(Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
startActivity(webIntent);
}
} catch (Exception e) {
e.printStackTrace();
}
}
view.loadUrl(url);
return true;
}
그럼 이제 오류가 안나온다!
'프로그래밍-앱 > 안드로이드스튜디오' 카테고리의 다른 글
[ 안드로이드스튜디오 ] 웹뷰 뒤로가기, 앱 종료 설정 (0) | 2023.05.08 |
---|---|
[ 안드로이드스튜디오 ] 웹뷰 alert, 경고창 허용하기 (0) | 2023.05.08 |
[ 안드로이드스튜디오 ] 버전 코드는 이미 사용되었습니다. 다른 버전 코드를 사용해 보세요. 해결 (1) | 2023.04.18 |
[ 안드로이트스튜디오 ] 'com.example'이(가) 제한된 상태이므로 다른 패키지 이름을 사용해야 합니다 해결 (0) | 2023.04.18 |
[ 안드로이드스튜디오 ] 플레이스토어 앱 출시하기 - 앱 번들 만들기 (0) | 2023.04.11 |
댓글