初接触Android,小白一个,记录一下生活学习的 点滴,理解和分析不到位请见谅。

刚接触安卓,书也没翻几页,见地实在浅薄

首先是从问题出手。客户丢来的问题:
1.日历调用提醒成功后,到时间没有提醒。(也就是闹钟没有响)

网上可以搜到相关的demo
这里我贴一个链接,我就不手敲代码了
http://blog.csdn.net/zhaoshuyu111/article/details/53195142?ref=myread
以上是Android向日历添加日程的demo。

然后我们写的api接口函数

public static void addCalendarEventRemind(Context context, @NonNull String title, String description, long begintime, long endtime, int remind_minutes, onCalendarRemindListener callback) {long calendar_id = checkAndAddCalendarAccounts(context);if (calendar_id < 0) {// 获取日历失败直接返回if (null != callback) {callback.onFailed(onCalendarRemindListener.Status.CALENDAR_ERROR);}return;}//根据标题、描述、开始时间查看提醒事件是否已经存在String event_id = queryCalendarEvent(context, calendar_id, title, description, begintime, endtime);//如果提醒事件不存在,则新建事件if (TextUtils.isEmpty(event_id)) {Uri newEvent = insertCalendarEvent(context, calendar_id, title, description, begintime, endtime);if (newEvent == null) {// 添加日历事件失败直接返回if (null != callback) {callback.onFailed(onCalendarRemindListener.Status.EVENT_ERROR);}return;}event_id = ContentUris.parseId(newEvent) + "";}//为事件设定提醒ContentValues values = new ContentValues();values.put(CalendarContract.Reminders.EVENT_ID, event_id);// 提前remind_minutes分钟有提醒values.put(CalendarContract.Reminders.MINUTES, remind_minutes);values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALARM);Uri uri = context.getContentResolver().insert(Uri.parse(calanderRemiderURL), values);if (uri == null) {// 添加提醒失败直接返回if (null != callback) {callback.onFailed(onCalendarRemindListener.Status.REMIND_ERROR);}return;}//添加提醒成功if (null != callback) {callback.onSuccess();}}

因为只是丢给我个接口,所以我用android studio创建了一个activity来调用该接口。

我在这里顺路说一个我遇到的 另外一个问题(对初学者可能会有帮助):
如果有人遇到了在AndroidManifast.xml中添加了permission权限不生效的问题。

其实就是新版本的SDK对权限进行了大改,很多别的帖子 都讲过了
有人说sdk23降到22就行,但是我的sdk版本已经29了,贸然改build.gradle会导致编译的时候找不到依赖

所以遇到像添加读写权限的时候 ,用下文的requestPermission就行了
动态请求权限。(这里也就是进入app后,会询问一次是否打开权限,我在疯狂系列和第一行系列,都看到类似的说法就是:早期的安卓版本不需要动态申请权限,之后更新是因为,不动态申请就会有app作者滥用和窃取用户信息),所以现在你自己亲自授权后就是签字画押后的卖身了,境界上了一层。

这里是Activiy主函数:

public class MainActivity extends 的  AppCompatActivity {private TextView textview;private Button button;private Context mcontext;final int MY_PERMISSIONS_REQUEST_CALENDAR = 0;private static String[] PERMISSSION_CALENDAR ={Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR};public MainActivity (){mcontext= MainActivity.this;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);BottomNavigationView navView = findViewById(R.id.nav_view);// Passing each menu ID as a set of Ids because each// menu should be considered as top level destinations.AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications).build();NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);NavigationUI.setupWithNavController(navView, navController);button = (Button) findViewById(R.id.Button);Buttonlistener buttonlistener = new Buttonlistener();button.setOnClickListener(buttonlistener);requestPermission();calendarEntry();}private void requestPermission() {int permission = ActivityCompat.checkSelfPermission(this,"android.permission.READ_CALENDAR");int permissionl = ActivityCompat.checkSelfPermission(this,"android.permission.WRITE_CALENDAR");if((permission!= PackageManager.PERMISSION_GRANTED)||(permissionl!=PackageManager.PERMISSION_GRANTED)){ActivityCompat.requestPermissions(this,PERMISSSION_CALENDAR, MY_PERMISSIONS_REQUEST_CALENDAR);}}class listenerCallback implements CalendarUtils.onCalendarRemindListener{public void onFailed(Status error_code) {}public void onSuccess() {}}public void calendarEntry(){String Ctitle = "clork1";String Cdescrption = "recieve clork1";Long tslong=System.currentTimeMillis();listenerCallback callback=new listenerCallback();Calendar calendar = Calendar.getInstance();Long time=calendar.getTimeInMillis();CalendarUtils.addCalendarEventRemind(mcontext,Ctitle,Cdescrption,tslong+2*60*1000,tslong+7*60*1000,1,callback);}

言归正传。我也不讲太多东西了。我直接说改那里,可以让闹钟(警报)定时响起:
上面第一段代码 addCalendarEventRemind 函数中
values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALARM)
这里METHOD_ALERM改为METHOD_ALERT即可

客户说小米手机可以用ALARM,然后我用vivo和华为都不行,我手上的样机也不行。
我看了下代码,应该是改了实现方式,MIUI控制闹钟提示不是用传统的EVENT表中的HAS_ALARM字段,而是ExtendPorperties中的values字段,我看不到小米的Calendar源码,我推测小米用的提醒是Alarm,而其他平台用的是Alert。如下我再贴一段JAVA 公用SDK中CalendarContract类中的成员
`    protected static interface RemindersColumns {java.lang.String EVENT_ID = "event_id";java.lang.String METHOD = "method";int METHOD_ALARM = 4;int METHOD_ALERT = 1;int METHOD_DEFAULT = 0;int METHOD_EMAIL = 2;int METHOD_SMS = 3;java.lang.String MINUTES = "minutes";int MINUTES_DEFAULT = -1;}`
这里就是reminder的接口成员了。
METHOD有闹钟,警报,默认,邮件和短信你如果设置了某一项,提前时间没有生效,那么可能就是你的app里没有对应成员或功能,最简单的验证方法,就是打开你的日历,自己亲自设置一下你想要的功能看它能否实现。如果你自己在app能都实现不了,那么你用api在你的activity里是死活也无法实现的还有就是你要确保自己的机器里有calendar APP ,我这的设备把不用的app都给删除了

Andriod studio manifast中添加权限却还无效日历api设置定时闹钟却不生效相关推荐

  1. 【转】在你的博客中添加Google地图(Use Google Map API On Your Bolg)

    在你的博客中添加Google地图(Use Google Map API On Your Bolg) *+申请一组 Google Maps API Key 在使用 Google Maps API 之前, ...

  2. multisim怎么设置晶体管rbe_multisim中添加大功率三极管的办法 multisim 三极管设置方法...

    本文主要是关于multisim的相关介绍,并着重对在multisim中添加大功率三极管以及三极管设置进行了相近的阐述. multisim Multisim是美国国家仪器(NI)有限公司推出的以Wind ...

  3. Android中设置定时闹钟以及AlarmManager详解

    AlarmManager是提供一种访问系统闹钟服务的方式,允许你去设置在将来的某个时间点去执行你的应用程序.当你的闹钟响起(时间到)时,在它上面注册的一个意图(Intent)将会被系统以广播发出,然后 ...

  4. Visual Studio 2010中添加App_Code文件夹注意事项

    默认情况下,VS2010中新建的WebApplication中是没有App_Code文件夹的,若需要使用,可以自己手动添加文件夹,然后将文件夹名称设置为App_Code,然后在该文件夹添加需要的类即可 ...

  5. Android6.0后调用打电话的权限(不仅仅在AndroidManifest中添加权限)

    在调用打电话权限前要增加权限的判断,如果没有就要弹出提示框让用户来选择是否允许打电话 private static final int MY_PERMISSIONS_REQUEST_CALL_PHON ...

  6. Android Studio工程中添加Admob广告条代码详解

    前言: 纵观国内的广告平台,比如多盟,万普,百度,腾讯,或者别的一些广告平台,真是应接不暇,但是具体接入那就自己判断了,经过一番折腾,最终还是选择了谷歌平台,理应是稳定,可靠,安全,收入颇高,但是登录 ...

  7. Safari Extension 扩展插件中关于权限的二三事(例如设置权限、权限类型等)

    Safari Extension 扩展插件的权限相关的内容大致分为下面几个方面: 用户要掌控扩展(Users are in control) Safari Extension 扩展插件是要在用户控制下 ...

  8. idea中添加类、方法注释,快捷键设置

    方法一: Settings ->Keymap ->Other ->Fix doc comment ->右键 ->选择 Add Keyboard Shortcut, 然后输 ...

  9. 如何在Visual Studio中“添加现有项”整个目录结构?

    我有一个独立于任何C#项目的独立文件集,它们位于复杂的嵌套目录结构中. 我想以这种格式将它们添加到我正在处理的ASP.NET Web应用程序中的不同目录中; 同时保留相同的结构. 所以,我将文件夹复制 ...

最新文章

  1. linux mysql统计次数_MySQL统计函数记录
  2. 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException...
  3. 发布一个实体类属性生成小工具,给开发加点料
  4. 中国电信与华为签物联网合作协议
  5. nginx的反向代理、负载均衡、页面缓存、URL重写及读写分离
  6. .NET 4.5 HttpClient 中使用Cookie
  7. Retrofit2的再封装实战—多线程下载与断点续传(三)
  8. libtool: Version mismatch error. This is libtool 2.4.6, but the definition of this LT_INIT
  9. 【特征提取】基于matlab熵函数语音端点检测【含Matlab源码 1764期】
  10. TINA-TI仿真软件使用教程
  11. Java学习路线总结(书籍、视频推荐篇)
  12. 微信小程序开发(4)--发布评论
  13. JavaScript 入门(一)
  14. wallpaper engine怎么用?
  15. 军用杀手机器人,人类的救星还是魔鬼?
  16. 2022-2028年中国祭祀用品行业市场竞争状况及发展趋向分析报告
  17. POI打印-----文件下载
  18. android两次返回退出程序,几种退出安卓应用的方式:退回桌面,弹出退出确认框,连续两次返回键退出...
  19. 解决开机后要等待很久才能连接宽带的方法,让宽带自动连接设置方法(转)...
  20. 冰河时代英文台词_即将到来的冰河时代

热门文章

  1. 函数的定义以及关键字参数
  2. php的swoole教程,PHP + Swoole2.0 初体验(swoole入门教程)
  3. python列表前加星号是什么_Python中的星号:用途及使用方法(1)
  4. 如何使用计算机查询本机网卡信息,本机mac地址查询的三种方法
  5. 推下属出去背锅,是最被人不耻的管理者
  6. 关于SBUF读两次的问题
  7. 通过Keycloak API理解OAuth2与OpenID Connect
  8. AD9910使用心得-fanfanStudio
  9. RT-Thread 4.1.0 特性解析之LIBC与POSIX
  10. 1.[QT | QCharts | 动态显示]折线图标题字体大小无法更改