public class AuthActivity extends AppBaseActivity {
/**
* 打印Log的标签
*/
private static final String TAG = "AuthActivity";
private WebView mWebView;
private TopNavbar mTopNavbar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 顶部返回按钮事件处理
mTopNavbar.llBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
@Override
protected void setupView() {
mTopNavbar = (TopNavbar) findViewById(R.id.rl_top_navbar);
mWebView = (WebView) findViewById(R.id.wv_auth);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.getSettings().setJavaScriptEnabled(true);
}
@Override
protected int getLayoutId() {
return R.layout.auth;
}
@Override
protected void initializedData() {
// 组拼请求参数
StringBuilder authorizeUrl = new StringBuilder(Constant.AUTHORIZE_URL);
authorizeUrl.append("?");
authorizeUrl.append("client_id=").append(Constant.API_KEY);
authorizeUrl.append("&redirect_uri=").append(Constant.DEFAULT_REDIRECT_URI);
authorizeUrl.append("&response_type=").append("token");
authorizeUrl.append("&display=").append("touch");
String scope = TextUtils.join(" ", Constant.HAVE_PERMISSIONS);
authorizeUrl.append("&scope=").append(scope);
Log.i(TAG, "authorizeUrl = " + authorizeUrl.toString());
mWebView.loadUrl(authorizeUrl.toString());
// 以POST方式请求
// mWebView.postUrl(Constant.AUTHORIZE_URL, EncodingUtils.getBytes(sb.toString(), "BASE64"));
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
Log.i(TAG, "shouldOverrideUrlLoading() Redirect URL = " + url);
if (url.startsWith(Constant.DEFAULT_REDIRECT_URI + "#error=login_denied")) {
AuthActivity.this.onBackPressed();
} else if(url.startsWith("http://graph.renren.com/oauth/login_success.html#access_token")) {
String accessToken = url.substring(url.indexOf("="), url.indexOf("&"));
Log.i(TAG, "accessToken = " + accessToken);
AuthActivity.this.onBackPressed();
return false;
}
webView.loadUrl(url);
return true;
}
public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError errorCode) {
// 在默认情况下,通过loadUrl(String url)方法,可以顺利load。
// 但是,当load有ssl层的https页面时,如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,
// 而并不会像PC浏览器中那样跳出一个风险提示框。因此,我们必须针对这种情况进行处理。(这个证书限于2.1版本以上的Android 系统才可以)
// 默认的处理方式,WebView变成空白页
// handler.cancel();
// 接受证书
handler.proceed();
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
AuthActivity.this.onBackPressed();
}
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.i(TAG, "Webview loading URL: " + url);
super.onPageStarted(view, url, favicon);
}
public void onPageFinished(WebView view, String url) {
Log.i(TAG, "onPageFinished() url = " + url);
super.onPageFinished(view, url);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mWebView != null) {
mWebView.stopLoading();
}
}
return super.onKeyDown(keyCode, event);
}
}
TopNavbar类:
package com.everyone.android.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.everyone.android.R;
/**
-
功能描述:自定义顶部工具栏
-
@author android_ls
-
创建日期:2013-03-26
*/
public class TopNavbar extends FrameLayout {
public TextView tvTitle;
public LinearLayout llBack;
public TopNavbar(Context context) {
super(context);
setupViews();
}
public TopNavbar(Context context, AttributeSet attrs) {
super(context, attrs);
setupViews();
}
private void setupViews() {
final LayoutInflater mLayoutInflater = LayoutInflater.from(getContext());
RelativeLayout rlTopNavbar = (RelativeLayout) mLayoutInflater.inflate(R.layout.top_navbar, null);
addView(rlTopNavbar);
llBack = (LinearLayout) rlTopNavbar.findViewById(R.id.ll_back);
tvTitle = (TextView) rlTopNavbar.findViewById(R.id.tv_title);
}
}
常量类:
package com.everyone.android.utils;
/**
-
功能描述:常量类
-
@author android_ls
*/
public class Constant {
/**
* 人人登录和授权的地址
*/
public static final String AUTHORIZE_URL = "https://graph.renren.com/oauth/authorize";
/**
* 默认重定向URL
*/
public static final String DEFAULT_REDIRECT_URI = "http://graph.renren.com/oauth/login_success.html";
/**
* 第三方应用所拥有的权限
*/
public static final String[] HAVE_PERMISSIONS = { "publish_feed", "create_album", "photo_upload", "read_user_album", "status_update",
"read_user_blog", "read_user_checkin", "read_user_feed", "read_user_guestbook", "read_user_invitation", "read_user_like_history",
"read_user_message", "read_user_notification", "read_user_photo", "read_user_status", "read_user_comment", "read_user_share",
"read_user_request", "publish_blog", "publish_checkin", "publish_feed", "publish_share", "write_guestbook", "send_invitation",
"send_request", "send_message", "send_notification", "photo_upload", "create_album", "publish_comment", "operate_like", "admin_page" };
/**
* API_KEY
*/
public static final String API_KEY = "661ea1ba2d6b49859be197d77fe361f1";
/**
* Secret Key
*/
public static final String SECRET_KEY = "a088d31cd5d341819bfc75ac0208b5e1";
/**
* 应用ID
*/
public static final String APP_ID = "195789";
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
结尾
- 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升
- 一线互联网Android面试题含详解(初级到高级专题)
这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率
有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-nI7iN9ne-1711861254578)]
结尾
- 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升
[外链图片转存中…(img-T1ThatPH-1711861254578)]
- 一线互联网Android面试题含详解(初级到高级专题)
这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率
[外链图片转存中…(img-Ob9ox0fp-1711861254579)]
有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我