Witam zostałem poproszony o przeniesienie do innego wątku, bo poruszałem za dużo kwestii, więc tak też uczyniłem 😃Chodzi o to, że piszę aplikację, która otwiera za pomocąWebView pewną stronę i raz na 24h muszę coś na tej stronie obejrzeć i wszystko ok mam automatyczne logowanie, alarm i wakelock, który wybudza apke kiedy trzeba i ogląda/klika to co trzeba, problem w tym, że aplikacja musi być zalogowana, żeby to obejrzeć, ale nie wiem jak sprawdzić to przez webview.......
Do logowania używam jednej klasy, którą podałem niżej a do oglądania/klikania wykorzystuje bardzo podobne jak to niżej, tylko, że Activity z tą różnicą, że jest inny
webView.loadUrl("podstrona na której klikam reklamy"); i inny String JS ze skryptem, który to klika
Przykład podaje oparty o Fragment mam też na Activity (tą samą klase), ale sam nie wiem czego powinienem używać do WebView, Activity czy Fragmetów? (o to też pytałem w jednym temacie i też miałem przenieść do innego wątku 😃)
public class AdBlastFragment extends Fragment {
SharedPreferences sharedPreferences;
ProgressDialog pd = null;
ProgressBar progressBar = null;
private SwipeRefreshLayout swipe;
private WebView webView;
// private NestedWebView webView;
public static final String MyPREFERENCES = "AdBlast";
private String login;
private String password;
private long myTime = 1551315630000L;
Date currentTime = Calendar.getInstance().getTime();
Alarmmanager am = new Alarmmanager();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "T:AG");
wakeLock.acquire();
getActivity().getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
final View view = inflater.inflate(R.layout.website, container, false);
sharedPreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
login = sharedPreferences.getString(this.getString(R.string.keyLogin), "");
password = sharedPreferences.getString(this.getString(R.string.keyPassword), "");
swipe = (SwipeRefreshLayout) view.findViewById(R.id.swpie);
swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
LoadWeb(view);
}
});
LoadWeb(view);
wakeLock.release();
return view;
}
public void LoadWeb(View view) {
webView = (WebView) view.findViewById(R.id.website);
WebSettings webSettings = webView.getSettings();
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
// webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.getSettings().setAppCacheEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webSettings.setDomStorageEnabled(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webSettings.setUseWideViewPort(true);
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setEnableSmoothTransition(true);
swipe.setRefreshing(true);
webView.loadUrl("https://adblast.alternet.com/auth");
final String js = "javascript:document.querySelector('input[name=email]').value='" + login + "';" +
"document.querySelector('input[name=password]').value='" + password + "';" +
"document.getElementById('submit').click()";
webView.setWebViewClient(new WebViewClient() {
// @Override
// public boolean shouldOverrideUrlLoading(WebView view, String url) {
// if (Uri.parse(url).getHost().equals("https://adblast.alternet.com/home")) {
// //open url contents in webview
// return false;
// } else {
// //here open external links in external browser or app
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
// startActivity(intent);
////
//// Intent intent = new Intent(Intent.ACTION_VIEW, AdBlastFragment.class); // Uri.parse(url)
//// startActivity(intent);
//
//// FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
//// fragmentTransaction.addToBackStack("tag of fragment"); // dzięki temu działa onBackPressed()
//// fragmentTransaction.replace(R.id.content_frame, new AdBlastFragment());
//// fragmentTransaction.commit();
// return true;
// }
// }
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("XXXXXXXXXXXXXXXXX", "your current url when webpage loading.." + url);
pd = new ProgressDialog(getActivity());
pd.setTitle("Please Wait..");
pd.setIcon(R.drawable.ad);
// pd.setProgressStyle(1);
pd.setMessage("Website is Loading..");
pd.show();
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d("YYYYYYYYYYYYYYYYYY", "your current url when webpage loading.. finish" + url);
pd.dismiss();
if (Build.VERSION.SDK_INT >= 19 && !login.isEmpty() && !password.isEmpty()) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
}
swipe.setRefreshing(false);
}
});
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int newProgress) {
((MainActivity) getActivity()).setActionBarTitleAndIcon("Page loading : " + newProgress + "%", 0);
if (newProgress == 100) {
((MainActivity) getActivity()).setActionBarTitleAndIcon(view.getTitle(), 0);
}
}
});
}
}
Próbowałem tego a dokładnie Cookiemanager.getinstance().getcookie(url) ale nie ważne czy jestem wylogowany czy zalogowany, pobiera dokładnie to samo. W sumie to nie wiem nawet co powinno być pobrane, ale sprawdziłem to sobie za pomocą Log.d( tutaj dałem to getcookie(url) ), ale pobierało dokładnie to samo
Rozumiem, że chodzi o zastosowanie metod...
shouldOverrideUrlLoading, onPageStarted i onPageFinished
tylko nie do końca wiem jeszcze jak to działa używam tylko onPageFinished i też przy pomocy Log.d() sprawdziłem sobie co jest pod tym URL w metodzie
public void onPageFinished(WebView view, String url)
Log.d("URL: " + url); i faktycznie tu jest url, który mógłbym użyć np w jakiejś instrukcji warunkowej, ale to jest w metodzie a ja bym potrzebował tego wcześniej, przed metodą i nie bardzowiem jak to rozwiązać🙁
MAMNADZIEJĘ, ŻE TO CO NAPISAŁEM WYŻEJ JEST ZROZUMIAŁEW MIARĘ, BO JEST TYCH KLAS DUŻO WIĘCEJ I CIĘŻKO WRZUCIĆ TU CAŁY PROJEKT 😃