我有搜索但沒有找到答案在stackoverflow直到現在。 我的項目是創建android webview應用程序顯示移動版本的網站。 我知道有沒有辦法網站可以檢測安裝在設備上的應用程序或不在鉻瀏覽器中運行的安全性。如何在webview和chrome中同步cookie android在webview和chrome中
因此,我用addtional App的名稱更改android應用程序的useragent ..然後每當用戶使用該應用程序時,網站將檢測到web正在webview中運行,然後在設備中寫入「Appname」。
從那裏如果用戶使用鉻瀏覽網站會發現該cookie,如果沒有發現網頁將顯示一些鏈接幫助用戶安裝應用程序。
問題是我的應用程序和Chrome瀏覽器之間的sysn cookies看起來不起作用。
以下是我的活動.java 感謝您的幫助!
public class XaLuanActivity extends Activity{
private static final String tag=XaLuanActivity.class.getCanonicalName();
private static final int CHIASE_MENU=1;
private static final int THOAT_MENU=2;
private static final int TAILAI_MENU=3;
private static final int TROGIUP_MENU=4;
private static final int DANHGIA_MENU=5;
private String mainUrl="http://www.xaluan.com/m.php";
ProgressBar mProgressBar;
WebView wbvContent;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);
setContentView(R.layout.xaluan);
wbvContent=(WebView) findViewById(R.id.wbvContent);
//wbvContent.setBackgroundColor(Color.parseColor("#FFFFFF"));
mProgressBar=(ProgressBar)findViewById(R.id.progressBar);
wbvContent.getSettings().setJavaScriptEnabled(true);
wbvContent.setInitialScale(1);
wbvContent.getSettings().setLoadWithOverviewMode(true);
wbvContent.getSettings().setUseWideViewPort(true);
wbvContent.getSettings().setSupportZoom(true);
wbvContent.getSettings().setBuiltInZoomControls(true);
wbvContent.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
wbvContent.getSettings().setUserAgentString(
wbvContent.getSettings().getUserAgentString()
+ " "
+ getString(R.string.user_agent_suffix)
); // detect useragent and add XLAndroidApp suffix name to the end
HelloWebViewClient wbvClient=new HelloWebViewClient();
wbvContent.setWebViewClient(wbvClient);
if(!isConnectedNetwork(this)) {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Thông báo")
.setMessage("Không có kết nối mạng, vui lòng kết nối mạng để sử dụng")
.setPositiveButton("Thử lại", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
XaLuanActivity.this.finish();
startActivity(new Intent(XaLuanActivity.this, XaLuanActivity.class));
}
})
.setNegativeButton("Thoát", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
XaLuanActivity.this.finish();
}
})
.show();
}else {
wbvContent.loadUrl(mainUrl);
wbvContent.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
if(progress < 100 && mProgressBar.getVisibility() == ProgressBar.GONE){
mProgressBar.setVisibility(ProgressBar.VISIBLE);
}
mProgressBar.setProgress(progress);
if(progress == 100) {
mProgressBar.setVisibility(ProgressBar.GONE);
}
}
});
}
isFirstTime();
}
public void isFirstTime() {// check if the first time
try{
SharedPreferences mPreference=PreferenceManager.getDefaultSharedPreferences(this);
boolean firstTime=mPreference.getBoolean("firstTime", true);
if(firstTime) {
ShortcutIconResource icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher);
Intent intent = new Intent();
Intent launchIntent = new Intent(this, XaLuanActivity.class);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
intent.putExtra("android.intent.extra.shortcut.NAME", "Xã Luận");
intent.putExtra("android.intent.extra.shortcut.ICON_RESOURCE", icon); //can also be ignored too
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(intent);
SharedPreferences.Editor edit=mPreference.edit();
edit.putBoolean("firstTime", false);
edit.commit();
}
}catch (Exception e) {
Log.e(tag+".isFirstTime", e.toString());
}
}
private static class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && (url.startsWith("market://") || url.indexOf("play.google.com/store/apps/details")!=-1)) {
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
//return true;
}
else if(url.endsWith(".apk") || url.indexOf("adsxaluan.apk.vn/download/")!=-1)
{
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url)));
}
else {
view.loadUrl(url);
//return false;
}
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, CHIASE_MENU, 0, "Chia Sẻ").setIcon(R.drawable.share);
menu.add(0, TAILAI_MENU, 0, "Tải Lại").setIcon(R.drawable.refresh);
menu.add(0, DANHGIA_MENU, 0, "Đánh Giá").setIcon(R.drawable.rate);
menu.add(0, TROGIUP_MENU, 0, "Trợ Giúp").setIcon(R.drawable.about);
menu.add(0, THOAT_MENU, 0, "Thoát").setIcon(R.drawable.exit);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case CHIASE_MENU: // chia se
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, wbvContent.getTitle());
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, wbvContent.getUrl());
startActivity(Intent.createChooser(sharingIntent,"Chia sẻ"));
break;
case THOAT_MENU: // chia se
System.exit(0);
break;
case TAILAI_MENU: // chia se
wbvContent.reload();
break;
case TROGIUP_MENU: // chia se
Intent intent1=new Intent(this, About.class);
startActivity(intent1);
break;
case DANHGIA_MENU:
String url="market://details?id="+getApplicationContext().getPackageName();
Intent intent2 = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent2);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(wbvContent.canGoBack()) {
wbvContent.goBack();
return false;
}else {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Thoát")
.setMessage("Bạn có muốn thoát khỏi ứng dụng không")
.setPositiveButton("Có", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
XaLuanActivity.this.finish();
}
})
.setNegativeButton("Không", null)
.show();
}
}
return super.onKeyDown(keyCode, event);
}
public static boolean isConnectedNetwork(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
}
我也對此感興趣。你有沒有找到解決方案? – startoftext