Android 安卓谷歌日历api 403事件插入禁止错误

Android 安卓谷歌日历api 403事件插入禁止错误,android,calendar,google-calendar-api,Android,Calendar,Google Calendar Api,我正在开发使用谷歌日历API的Android应用程序。我遵循现场显示的标准示例。但我每次都犯403的错误 我的密码 公共类CalendarActivityMain扩展活动 实现EasyPermissions.PermissionCallbacks{ 谷歌会计凭证; 私有文本视图mOutputText; 专用按钮mcalapibutton; 进步; 静态最终整数请求\帐户\选择器=1000; 静态最终int请求_授权=1001; 静态最终整数请求\谷歌\播放\服务=1002; 静态最终整数请求\

我正在开发使用谷歌日历API的Android应用程序。我遵循现场显示的标准示例。但我每次都犯403的错误

我的密码

公共类CalendarActivityMain扩展活动
实现EasyPermissions.PermissionCallbacks{
谷歌会计凭证;
私有文本视图mOutputText;
专用按钮mcalapibutton;
进步;
静态最终整数请求\帐户\选择器=1000;
静态最终int请求_授权=1001;
静态最终整数请求\谷歌\播放\服务=1002;
静态最终整数请求\权限\获取\帐户=1003;
私有静态最终字符串按钮\u TEXT=“调用谷歌日历API”;
私有静态最终字符串PREF\u ACCOUNT\u NAME=“accountName”;
私有静态最终字符串[]SCOPES={CalendarScopes.CALENDAR\u READONLY};
/**
*创建主活动。
*@param savedInstanceState以前保存的实例数据。
*/
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LinearLayout activityLayout=新的LinearLayout(此);
LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_父级,
LinearLayout.LayoutParams.MATCH_PARENT);
activityLayout.setLayoutParams(lp);
活动布局。设置方向(线性布局。垂直);
activityLayout.setPadding(16,16,16,16);
ViewGroup.LayoutParams tlp=新建ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_内容,
ViewGroup.LayoutParams.WRAP_内容);
mCallApiButton=新按钮(此按钮);
mcalapibutton.setText(按钮文本);
mCallApiButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mCallApiButton.setEnabled(错误);
mOutputText.SETEXT(“”);
getResultsFromApi();
mCallApiButton.setEnabled(真);
}
});
activityLayout.addView(mCallApiButton);
mOutputText=新文本视图(此);
MoutText.setLayoutParams(tlp);
moutput.setPadding(16,16,16,16);
MoutText.setVerticalScrollBarEnabled(真);
MoutText.setMovementMethod(新的ScrollingMovementMethod());
moutput.setText(
“单击\'”+按钮\“文本+”\”按钮测试API。”);
activityLayout.addView(mouttext);
mpprogress=新建进度对话框(此对话框);
setMessage(“调用谷歌日历API…”);
setContentView(活动布局);
//初始化凭据和服务对象。
mCredential=GoogleAccountCredential.usingAuth2(
getApplicationContext(),Arrays.asList(作用域))
.setBackOff(新的指数backoff());
}
/**
*在验证所有前提条件都满足后,尝试调用API
*满意。先决条件是:安装了Google Play服务
*已选择帐户,并且设备当前具有联机访问权限。如果有的话
*如果不满足前提条件,应用程序将提示用户
*合适。
*/
私有void getResultsFromApi(){
如果(!isGooglePlayServicesAvailable()){
acquireGooglePlayServices();
}else if(mCredential.getSelectedAccountName()==null){
选择帐户();
}如果(!isDeviceOnline()),则为else{
setText(“没有可用的网络连接”);
}否则{
新建MakeRequestTask(mCredential.execute();
}
}
/**
*尝试设置与API凭据一起使用的帐户。如果
*以前保存的名称将使用该名称;否则将创建帐户
*选择器对话框将显示给用户。请注意
*与凭据对象一起使用的帐户要求应用程序具有
*GET_ACCOUNTS权限,如果尚未获得此权限,则在此请求此权限
*存在。AfterPermissionGrated注释表明
*只要获得帐户权限,函数就会自动重新运行
*这是理所当然的。
*/
@授予后权限(请求权限获取帐户)
私有void chooseAccount(){
如果(EasyPermissions.hasPermissions(
这个,Manifest.permission.GET_账户){
String accountName=getPreferences(Context.MODE\u PRIVATE)
.getString(首选帐户名称,空);
if(accountName!=null){
mCredential.setSelectedAccountName(accountName);
getResultsFromApi();
}否则{
//启动一个对话框,用户可以从中选择帐户
startActivityForResult(
mCredential.newChooseAccountContent(),
请求(账户选取者);
}
}否则{
//通过用户对话框请求GET_ACCOUNTS权限
EasyPermissions.requestPermissions(
这
“此应用程序需要访问您的Google帐户(通过联系人)。”,
请求\u权限\u获取\u帐户,
Manifest.permission.GET_账户);
}
}
/**
*在此处启动活动(特别是AccountPicker)时调用
*和授权)退出,并提供启动时使用的请求代码,
*它返回的结果代码,以及其中的任何附加数据。
*@param requestCode表示传入哪个活动结果的代码。
*@param resultCode代码,指示传入
*活动结果。
*@param data Intent(包含结果数据)由传入数据返回
*活动结果。
*/
@凌驾
保护