2017-01-09 6 views
0

Я последовал this Захват изображений и загружать с веб-зренияAndroid Webveiw камера загрузки не работает на ротации? WebView перезагрузки? Android 5 и 6+

Так вот его прекрасно работать в портретном режиме

Но Его не работает или веб-просмотр Перезагрузка В двух случаях 1. Когда я поворачиваю телефон 2. Когда я снимаю изображение (на некотором телефоне) По умолчанию Камера является ландшафтом, поэтому ее перезагрузка .., но в некоторых других телефонах работает но только в портфолио.

F или фиксации перезагрузки веб-просмотр у меня есть дать это в нормальном

@Override 
protected void onSaveInstanceState(Bundle outState){ 
    super.onSaveInstanceState(outState); 

    webView.saveState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    webView.restoreState(savedInstanceState); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig){ 
    super.onConfigurationChanged(newConfig); 
} 

и В манифесте android:configChanges="orientation|screenSize|keyboardHidden"

Но это не работает, пожалуйста, помогите мне в этом роде ..

Пожалуйста, предложите мне любой один на WebView захватить и загрузить ...

ответ

1

Использование this для Android 5 и 6+ версии

для захвата формы изображения веб-представление и Загрузить

Потому что в вашем коде большинство из них Устаревшие ... форма леденец, так что может не работать на новых версиях ..

использовать это в вашем MainActivity

public class MainActivity extends Activity { 

    private static final String TAG = MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if (savedInstanceState == null) { 
      Log.v(TAG, "MainFragment Creation"); 
      getFragmentManager().beginTransaction() 
        .add(R.id.container, new MainFragment()) 
        .commit(); 
     } 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

И добавить фрагмент деятельность в качестве веб-зрения

public class MainFragment extends Fragment { 

    private static final String TAG = MainFragment.class.getSimpleName(); 

    public static final int INPUT_FILE_REQUEST_CODE = 1; 
    public static final String EXTRA_FROM_NOTIFICATION = "EXTRA_FROM_NOTIFICATION"; 

    private WebView mWebView; 
    private ValueCallback<Uri[]> mFilePathCallback; 
    private String mCameraPhotoPath; 

    public MainFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

     // Get reference of WebView from layout/activity_main.xml 
     mWebView = (WebView) rootView.findViewById(R.id.fragment_main_webview); 

     setUpWebViewDefaults(mWebView); 

     // Check whether we're recreating a previously destroyed instance 
     if (savedInstanceState != null) { 
      // Restore the previous URL and history stack 
      mWebView.restoreState(savedInstanceState); 
     } 

     mWebView.setWebChromeClient(new WebChromeClient() { 
      public boolean onShowFileChooser(
        WebView webView, ValueCallback<Uri[]> filePathCallback, 
        WebChromeClient.FileChooserParams fileChooserParams) { 
       if(mFilePathCallback != null) { 
        mFilePathCallback.onReceiveValue(null); 
       } 
       mFilePathCallback = filePathCallback; 

       Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
        // Create the File where the photo should go 
        File photoFile = null; 
        try { 
         photoFile = createImageFile(); 
         takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath); 
        } catch (IOException ex) { 
         // Error occurred while creating the File 
         Log.e(TAG, "Unable to create Image File", ex); 
        } 

        // Continue only if the File was successfully created 
        if (photoFile != null) { 
         mCameraPhotoPath = "file:" + photoFile.getAbsolutePath(); 
         takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
           Uri.fromFile(photoFile)); 
        } else { 
         takePictureIntent = null; 
        } 
       } 

       Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); 
       contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); 
       contentSelectionIntent.setType("image/*"); 

       Intent[] intentArray; 
       if(takePictureIntent != null) { 
        intentArray = new Intent[]{takePictureIntent}; 
       } else { 
        intentArray = new Intent[0]; 
       } 

       Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); 
       chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); 
       chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); 
       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); 

       startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE); 

       return true; 
      } 
     }); 

     // Load the local index.html file 
     if(mWebView.getUrl() == null) { 
      mWebView.loadUrl("file:///android_asset/www/index.html"); 
     } 

     return rootView; 
    } 
// add these two to solve orientation Issue.. as U already know... 

@Override 
public void onSaveInstanceState(Bundle outState){ 
    super.onSaveInstanceState(outState); 
    webView.saveState(outState); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig){ 
    super.onConfigurationChanged(newConfig); 
} 


    private File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File storageDir = Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES); 
     File imageFile = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       storageDir  /* directory */ 
     ); 
     return imageFile; 
    } 


    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    private void setUpWebViewDefaults(WebView webView) { 
     WebSettings settings = webView.getSettings(); 

     // Enable Javascript 
     settings.setJavaScriptEnabled(true); 

     // Use WideViewport and Zoom out if there is no viewport defined 
     settings.setUseWideViewPort(true); 
     settings.setLoadWithOverviewMode(true); 

     // Enable pinch to zoom without the zoom buttons 
     settings.setBuiltInZoomControls(true); 

     if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { 
      // Hide the zoom controls for HONEYCOMB+ 
      settings.setDisplayZoomControls(false); 
     } 

     // Enable remote debugging via chrome://inspect 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      WebView.setWebContentsDebuggingEnabled(true); 
     } 

     // We set the WebViewClient to ensure links are consumed by the WebView rather 
     // than passed to a browser if it can 
     mWebView.setWebViewClient(new WebViewClient()); 
    } 

    @Override 
    public void onActivityResult (int requestCode, int resultCode, Intent data) { 
     if(requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) { 
      super.onActivityResult(requestCode, resultCode, data); 
      return; 
     } 

     Uri[] results = null; 

     // Check that the response is a good one 
     if(resultCode == Activity.RESULT_OK) { 
      if(data == null) { 
       // If there is not data, then we may have taken a photo 
       if(mCameraPhotoPath != null) { 
        results = new Uri[]{Uri.parse(mCameraPhotoPath)}; 
       } 
      } else { 
       String dataString = data.getDataString(); 
       if (dataString != null) { 
        results = new Uri[]{Uri.parse(dataString)}; 
       } 
      } 
     } 

     mFilePathCallback.onReceiveValue(results); 
     mFilePathCallback = null; 
     return; 
    } 
} 

Вы можете сделать изменения в соответствии с андроид версии, такие как предоставление разрешения времени выполнения для этого в андроид 6+

Добавьте свой код, чтобы установить ориентацию, как вы уже сделали

Здесь я уже Учитывая onRestore так что не добавить ...

Надеется, что это может помочь вам ..

+0

хорошо, что о ориентация ... –

+0

Проверьте мое обновление ... – MLN

+0

Хорошо спасибо Благодаря своей работе Большое спасибо ... его работа над Ориентацией также ... –