오류가 하나도 없는 웹뷰앱 + 파일권한 정보
오류가 하나도 없는 웹뷰앱 + 파일권한본문
*** 완성본은 곧 스토어에 올라옵니다 ***
모르는건 댓글 남겨주세용
기본 설명 : 자바입니다. / 프로젝트 생성할 때 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
댓글 0개