У меня есть веб-страница, которая активирует задание печати на Bluetooth-принтере. При нажатии кнопки «Печать» (кнопка) мой веб-просмотр передает html документ в другое приложение Bluetooth для печати html. Проблема в том, что когда я использую Google chrome, он работает нормально (задание на печать), но когда я использую свое веб-представление, оно меняется персонаж см. изображение первая печать напечатана приложением google chrome android, а вторая - это мое веб-представление
как я могу решить эту проблему, я новичок в android studioa, проверьте этот код строка выполняет задание на печать "intent.setType (" text / plain ");" это вызывает проблему?
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!Utility.isNetworkAvailable(MainActivity.this)) {
return false;
}
if (URLUtil.isNetworkUrl(url)) {
loaderRoot.setVisibility(View.VISIBLE);
noInternetButton.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
return false;
}
if (appInstalledOrNot(url)) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} else {
try {
if (url.contains("fterplus://")) {
String content = url.split("\\?")[1];
Log.d("\nCONTENT: ", content);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, content);
intent.setType("text/plain");
intent.setPackage("es.rcti.printerplus");
MainActivity.this.startActivity(intent);
} else {
view.loadUrl(url);
}
} catch (android.content.ActivityNotFoundException ex) {
String MakeShortText = "Please install PrinterPlus...";
Utility.showToast(MainActivity.this, MakeShortText);
}
}
и это полный код
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
private WebView webView;
private SwipeRefreshLayout refreshLayout;
private ValueCallback<Uri> mUploadMessage;
public ValueCallback<Uri[]> uploadMessage;
public static final int REQUEST_SELECT_FILE = 100;
private final static int FILECHOOSER_RESULTCODE = 1;
private SpinKitView loader = null;
private LinearLayout loaderRoot = null;
private LinearLayout noInternetButton;
private boolean loadingFinished = true;
private boolean redirect = false;
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hamza);
initView();
clickListeners();
initWebView();
}
private void initView() {
webView = findViewById(R.id.webView);
noInternetButton = findViewById(R.id.noInternetBtn);
loader = findViewById(R.id.spin_kit);
loaderRoot = findViewById(R.id.loaderRoot);
Sprite drawable = SpriteFactory.create(Style.WAVE);
drawable.setColor(Color.BLACK);
loader.setIndeterminateDrawable(drawable);
}
private void initWebView() {
WebSettings mWebSettings = webView.getSettings();
mWebSettings.setJavaScriptEnabled(true);
mWebSettings.setSupportZoom(false);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowContentAccess(true);
mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(new MyBrowser());
webView.loadUrl("https://pakistanshop.pk");
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh);
refreshLayout.setOnRefreshListener(this);
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setMimeType(mimeType);
//------------------------COOKIE!!------------------------
String cookies = CookieManager.getInstance().getCookie(url);
request.addRequestHeader("cookie", cookies);
//------------------------COOKIE!!------------------------
request.addRequestHeader("User-Agent", userAgent);
request.setDescription("Downloading file...");
request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimeType));
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
}
});
webView.setWebChromeClient(new WebChromeClient() {
// For 3.0+ Devices (Start)
// onActivityResult attached before constructor
protected void openFileChooser(ValueCallback uploadMsg, String acceptType) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);
}
// For Lollipop 5.0+ Devices
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
if (uploadMessage != null) {
uploadMessage.onReceiveValue(null);
uploadMessage = null;
}
uploadMessage = filePathCallback;
Intent intent = fileChooserParams.createIntent();
try {
startActivityForResult(intent, REQUEST_SELECT_FILE);
} catch (ActivityNotFoundException e) {
uploadMessage = null;
Toast.makeText(MainActivity.this.getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show();
return false;
}
return true;
}
});
}
@Override
public void onRefresh() {
webView.reload();
refreshLayout.setRefreshing(false);
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!Utility.isNetworkAvailable(MainActivity.this)) {
return false;
}
if (URLUtil.isNetworkUrl(url)) {
loaderRoot.setVisibility(View.VISIBLE);
noInternetButton.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
return false;
}
if (appInstalledOrNot(url)) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} else {
try {
if (url.contains("fterplus://")) {
String content = url.split("\\?")[1];
Log.d("\nCONTENT: ", content);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, content);
intent.setType("text/plain");
intent.setPackage("es.rcti.printerplus");
MainActivity.this.startActivity(intent);
} else {
view.loadUrl(url);
}
} catch (android.content.ActivityNotFoundException ex) {
String MakeShortText = "Please install PrinterPlus...";
Utility.showToast(MainActivity.this, MakeShortText);
}
}
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (!Utility.isNetworkAvailable(MainActivity.this)) {
view.setVisibility(View.GONE);
noInternetButton.setVisibility(View.VISIBLE);
loaderRoot.setVisibility(View.INVISIBLE);
webView.stopLoading();
return;
}
noInternetButton.setVisibility(View.GONE);
webView.setVisibility(View.VISIBLE);
loaderRoot.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
if (!Utility.isNetworkAvailable(MainActivity.this)) {
return;
}
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
loaderRoot.setVisibility(View.INVISIBLE);
if (!Utility.isNetworkAvailable(MainActivity.this)) {
return;
}
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
if (!Utility.isNetworkAvailable(MainActivity.this)) {
return;
}
super.onReceivedError(view, request, error);
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
Log.e("Exception", e.getMessage());
}
return false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (requestCode == REQUEST_SELECT_FILE) {
if (uploadMessage == null)
return;
uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));
uploadMessage = null;
}
} else if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != MainActivity.RESULT_OK ? null : intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
} else
Toast.makeText(MainActivity.this.getApplicationContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show();
}
private void clickListeners() {
noInternetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onRefresh();
}
});
}
}