오류가 하나도 없는 웹뷰앱 + 파일권한 > 자유게시판

자유게시판

오류가 하나도 없는 웹뷰앱 + 파일권한 정보

오류가 하나도 없는 웹뷰앱 + 파일권한

본문

*** 완성본은 곧 스토어에 올라옵니다 ***

모르는건 댓글 남겨주세용

 

기본 설명 : 자바입니다. / 프로젝트 생성할 때 Use legacy android.support libraries 선택해주셔야해요.

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" />

</android.support.constraint.ConstraintLayout>

 

-

 

MainActivity.Java

 

패키지 명 밑에다가 해주시고, 빨간색으로 에러뜨는 부분은 Alt Enter 누르셔서 import 해주세요.

사이트 주소 부분에는 본인 사이트 주소 적으시면 됩니다. http or https 까지요

 

public class MainActivity extends AppCompatActivity {
    public static final String TAG = "사이트 이름";
    public static final int IMAGE_SELECTOR_REQ = 999;
    public static final int KAKAO_SHARE_REQ = 998;
    public static final String SERVER_IP = "사이트주소";
    public static final String SERVER_HOST = "사이트주소";
    private WebView myWebView;
    private ValueCallback mFilePathCallback;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // HashGetter.getHashKey(getApplicationContext());
        myWebView = (WebView) findViewById(R.id.webview);
        myWebView.setWebChromeClient(new MyWebChromeClient());
        setGPULayerType(myWebView);
        myWebView.setWebViewClient(new WebViewClient());
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setPluginState(WebSettings.PluginState.ON);
        myWebView.loadUrl(SERVER_IP);
    }

    private void setGPULayerType(WebView webView) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
        } else {
            webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK){
            switch (requestCode) {
                case IMAGE_SELECTOR_REQ:
                    if (data.getClipData() != null) {
                        int count = data.getClipData().getItemCount();
                        Uri[] uris = new Uri[count];
                        for (int i = 0; i < count; i++)
                            uris[i] = data.getClipData().getItemAt(i).getUri();
                        mFilePathCallback.onReceiveValue(uris);
                    } else if (data.getData() != null) {
                        mFilePathCallback.onReceiveValue(new Uri[]{data.getData()});
                    }
                    break;
                case KAKAO_SHARE_REQ:
                    Log.d(TAG, "onActivityResult: Kakao Share");
                    myWebView.getOriginalUrl();
                    break;
            }
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
            myWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    private class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
            result.confirm();
            return true;
        }

        @Override
        public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback,
                                         WebChromeClient.FileChooserParams fileChooserParams) {
            mFilePathCallback = filePathCallback;
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("image/*");
            startActivityForResult(Intent.createChooser(intent,"Select Picture"), IMAGE_SELECTOR_REQ);
            return true;
        }
    }
    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().equals("사이트주소")) {
                // This is my website, so do not override; let my WebView load the page
                return false;
            }
            // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }
    }
}

AndroidManifest.xml

 

다른 코드 삭제하지 마시고 package 밑에다가 이 코드를 넣어주세요.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 

만약 사이트 주소가 http라면 

android:supportsRtl="true" 밑에다가 
android:usesCleartextTraffic="true" 를 넣어주세요.

이 코드 넣어주세요.

끝입니다.

추천
0

댓글 0개

전체 195,295 |RSS
자유게시판 내용 검색

회원로그인

진행중 포인트경매

  1. 참여67 회 시작24.04.19 15:40 종료24.04.26 15:40
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT