当前位置: 首页 > news >正文

无锡工程建设招标网站微信公众号怎样开通

无锡工程建设招标网站,微信公众号怎样开通,在家建设一个网站需要什么手续,广州注册公司必看功能 在安卓应用里调用系统日历#xff0c;直接创建一个带提醒的日历事件#xff0c;甚至不需要跳转到日历界面#xff0c;只需要获取系统日历的读取权限即可。 需要的权限 在AndroidManifest.xml里添加 uses-permission android:nameandroid.permission.READ_CAL…功能 在安卓应用里调用系统日历直接创建一个带提醒的日历事件甚至不需要跳转到日历界面只需要获取系统日历的读取权限即可。 需要的权限 在AndroidManifest.xml里添加 uses-permission android:nameandroid.permission.READ_CALENDAR/ uses-permission android:nameandroid.permission.WRITE_CALENDAR/注意 如果是Android 6.0API 23以上需要动态申请权限。代码 创建一个CalendarHelper工具类包含 获取系统日历账户自动写入事件添加提醒自动处理没有日历账户的情况可提示用户手动创建动态申请权限(当用户拒绝权限时我这里会弹出一个提示框提示的内容可以从外部传入也可以使用默认的。或者你不是使用默认直接打开系统的设置页面也是可以的(下面屏蔽了这部分的代码))判断是否已存在相同时间的逻辑避免重复添加 package com.cocos.calender;import android.app.Activity; import android.Manifest; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.provider.CalendarContract; import android.provider.Settings; import android.text.TextUtils; import android.util.Log;import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import java.util.Calendar; import java.util.TimeZone; import org.json.JSONObject; import org.json.JSONException; import android.widget.Toast;public class CalendarHelper {private static final String TAG CalendarHelper;/** 用来存放拒绝权限时的提示语 */private static String denyPermissionMessage 未获得日历权限无法添加提醒事件;/** 日历权限请求码 */public static final int REQUEST_CALENDAR_PERMISSION 1010;/** 临时存储待执行事件 */private static PendingEvent pendingEvent;private static class PendingEvent {String title;String description;String location;long beginTime;long endTime;int reminderMinutes;PendingEvent(String title, String description, String location,long beginTime, long endTime, int reminderMinutes) {this.title title;this.description description;this.location location;this.beginTime beginTime;this.endTime endTime;this.reminderMinutes reminderMinutes;}}/*** 检查权限并添加事件带权限请求*/public static void addEventWithPermission(Activity activity,String title,String description,String location,long beginTimeMillis,long endTimeMillis,int reminderMinutes) {// 检查日历读写权限if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_CALENDAR)! PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_CALENDAR)! PackageManager.PERMISSION_GRANTED) {// 保存事件等待用户授权pendingEvent new PendingEvent(title, description, location, beginTimeMillis, endTimeMillis, reminderMinutes);// 这里可以加解释但不强制if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.READ_CALENDAR)) {Log.i(TAG, 需要日历权限来添加提醒事件);}// ✅ 直接请求权限即使用户上次拒绝这里依旧会再弹一次ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR},REQUEST_CALENDAR_PERMISSION);} else {// 权限已授权直接添加addEvent(activity, title, description, location, beginTimeMillis, endTimeMillis, reminderMinutes);}}/*** 在 Activity 的 onRequestPermissionsResult 中调用*/public static void onRequestPermissionsResultCalendar(Activity activity,int requestCode,NonNull int[] grantResults) {if (requestCode REQUEST_CALENDAR_PERMISSION) {if (grantResults.length 2 grantResults[0] PackageManager.PERMISSION_GRANTED grantResults[1] PackageManager.PERMISSION_GRANTED) {Log.i(TAG, 日历权限申请成功);if (pendingEvent ! null) {addEvent(activity,pendingEvent.title,pendingEvent.description,pendingEvent.location,pendingEvent.beginTime,pendingEvent.endTime,pendingEvent.reminderMinutes);pendingEvent null;}} else {Log.e(TAG, 用户拒绝了日历权限);Toast.makeText(activity,denyPermissionMessage,Toast.LENGTH_SHORT).show();// 如果用户永久拒绝可跳转设置 // if (!ActivityCompat.shouldShowRequestPermissionRationale(activity, android.Manifest.permission.READ_CALENDAR)) { // Intent intent new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); // intent.setData(Uri.parse(package: activity.getPackageName())); // activity.startActivity(intent); // }}}}/** 获取系统日历账户 ID */private static long getCalendarAccountId(Context context) {Cursor userCursor context.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI,new String[]{CalendarContract.Calendars._ID},null, null, null);if (userCursor ! null) {try {if (userCursor.moveToFirst()) {return userCursor.getLong(0);}} finally {userCursor.close();}}return -1;}/** 判断事件是否已存在避免重复 */private static boolean isEventAlreadyExists(Context context, String title, long beginTimeMillis) {long oneMinuteBefore beginTimeMillis - 60 * 1000;long oneMinuteAfter beginTimeMillis 60 * 1000;Cursor cursor context.getContentResolver().query(CalendarContract.Events.CONTENT_URI,new String[]{CalendarContract.Events._ID},CalendarContract.Events.TITLE ? AND CalendarContract.Events.DTSTART ? AND CalendarContract.Events.DTSTART ?,new String[]{title, String.valueOf(oneMinuteBefore), String.valueOf(oneMinuteAfter)},null);if (cursor ! null) {try {if (cursor.moveToFirst()) {return true; // 已存在}} finally {cursor.close();}}return false;}/** 插入日历事件 提醒 */private static boolean addEvent(Context context,String title,String description,String location,long beginTimeMillis,long endTimeMillis,int reminderMinutes) {long calId getCalendarAccountId(context);if (calId -1) {Log.e(TAG, 没有找到系统日历账户请先在系统日历中添加一个账户);return false;}if (isEventAlreadyExists(context, title, beginTimeMillis)) {Log.w(TAG, 事件已存在跳过添加: title);return false;}ContentValues eventValues new ContentValues();eventValues.put(CalendarContract.Events.CALENDAR_ID, calId);eventValues.put(CalendarContract.Events.TITLE, TextUtils.isEmpty(title) ? 未命名事件 : title);eventValues.put(CalendarContract.Events.DESCRIPTION, description);eventValues.put(CalendarContract.Events.EVENT_LOCATION, location);eventValues.put(CalendarContract.Events.DTSTART, beginTimeMillis);eventValues.put(CalendarContract.Events.DTEND, endTimeMillis);eventValues.put(CalendarContract.Events.HAS_ALARM, 1);eventValues.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());Uri newEvent context.getContentResolver().insert(CalendarContract.Events.CONTENT_URI, eventValues);if (newEvent null) {Log.e(TAG, 插入日历事件失败);return false;}long eventId ContentUris.parseId(newEvent);ContentValues reminderValues new ContentValues();reminderValues.put(CalendarContract.Reminders.EVENT_ID, eventId);reminderValues.put(CalendarContract.Reminders.MINUTES, reminderMinutes);reminderValues.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);Uri reminderUri context.getContentResolver().insert(CalendarContract.Reminders.CONTENT_URI, reminderValues);if (reminderUri null) {Log.e(TAG, 插入提醒失败);return false;}Log.i(TAG, 日历事件添加成功eventId eventId);return true;}public static void creatroCalendarReminder(Context context,String data){try {// 将传入的字符串转成 JSON 对象JSONObject json new JSONObject(data);// 从 JSON 中取字段如果没有就用默认值String title json.optString(title, 测试);String description json.optString(description, 测试);String location json.optString(location, 测试);int startHour json.optInt(startHour, 1);int startMinute json.optInt(startMinute, 10);int endHour json.optInt(endHour, startHour 1);Calendar begin Calendar.getInstance();begin.add(Calendar.DAY_OF_MONTH, 0); // 哪天开始Calendar.DAY_OF_MONTH当前时间 后面参数值比如我这里为0就是今天如果为1就是明天begin.set(Calendar.HOUR_OF_DAY, startHour); // 开始的小时这里是24小时制 startHour的取值范围为0~23begin.set(Calendar.MINUTE, startMinute); // 开始的分钟 Calendar end (Calendar) begin.clone();end.set(Calendar.HOUR_OF_DAY, endHour); // 结束的时间参数和上面开始时间一样赋值方式为end.setif (context null) {Log.e(Calendar, Context is null);return;}// 添加事件CalendarHelper.addEventWithPermission((Activity) context,title,description,location,begin.getTimeInMillis(), //事件开始时间的毫秒值end.getTimeInMillis(), //事件结束时间的毫秒值5 // 提前5分钟提醒);} catch (JSONException e) {e.printStackTrace();Log.e(Calendar, JSON解析失败 data);}}/*** 从外部传提示文本过来* param message*/public static void setDenyPermissionMessage(String message) {if (!TextUtils.isEmpty(message)) {denyPermissionMessage message;}} }Activity中的逻辑 先在Activity中引入CalendarHelper类并调用CalendarHelper.creatroCalendarReminder()方法传入参数实现日历添加功能。Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);// 处理日历权限if (requestCode CalendarHelper.REQUEST_CALENDAR_PERMISSION) {if (Build.VERSION.SDK_INT Build.VERSION_CODES.M) {CalendarHelper.onRequestPermissionsResultCalendar(this, requestCode, grantResults);}}}添加创建日历提醒事件和传入提示文本/*** 创建日历提醒事件* param data*/public static void creatroCalendarReminder(String data){Context context AppActivity.getInstance();CalendarHelper.creatroCalendarReminder(context,data);}/*** 获取读取日历权限被拒绝时的提示文本* param str*/public static void setDenyPermissionMessage(String str){CalendarHelper.setDenyPermissionMessage(str);}
http://www.zqtcl.cn/news/477672/

相关文章:

  • 温州企业网站建设费用培训行业门户网站建设方案
  • 口碑好的常州网站优化深圳市光明区实验学校
  • 网站怎么做微博认证网页设计代码html作品展示
  • 在线网站建设活动初创企业的建站流程
  • 汨罗哪里有网站开发的公司电话百度首页关键词推广
  • 天津百度整站优化服务政务网站模版
  • 推荐家居企业网站建设用什么工具修改wordpress
  • wix做的网站能扒下来哈尔滨做网站的oeminc
  • 做网站的网络公司门户网站介绍
  • 软件公司网站系统集成建设下拉关键词排名
  • 景翔物流网站建设公司企业网站优化排名
  • 余姚做网站62752762素材网站建设需要多少费用
  • dede网站后台导入文档许昌网站开发哪家好
  • 网站建设宣传psdwordpress 链接关系
  • 宁波网站建设免费咨询深圳做棋牌网站建设找哪家公司好
  • 安阳门户网站html5网页代码
  • 企业建站系统下载广州有几个区几个县级市
  • 时装网站建设的背景广州建设专业网站
  • 来年做那些网站能致富网站建设优化文档
  • 好看的商城网站企业所得税分录
  • 网站建设你懂的网站提高内容的丰富度创意
  • 菏泽做网站设计做一个简单的网站需要多少钱
  • html企业网站怎么做免费crm平台
  • 婚庆公司网站制作如何自己制作首页网站
  • ic外贸网站建设龙岩app制作
  • 长沙企业建网站绵阳市三台县城乡建设局网站
  • 常宁市城市建设规划管理局网站织梦网做网站步骤
  • 对网站开发实训的建议怎么把产品推广到各大平台
  • wap网站是什么意思啊网站建设网站模板
  • 湛江市建设局网站天津网站建设渠道