当前位置:   article > 正文

小米便签开源项目本地环境搭建与分析_method 'setlatesteventinfo' in 'notification

method 'setlatesteventinfo' in 'notification

小米便签开源项目本地环境搭建与分析

一. 安装Android Studio

可以参考如下教程安装Android Studio和sdk
注意:最好在官网下载,不要在下面博客中发的链接(非官网)下载Android Studio

Android Studio的安装,史上最详细(超多图)!!_iterhuiの博客-CSDN博客_android studio

当你创建一个空项目,能正常显示说明安装成功,第一次打开项目通常会遇到gradle的各种问题,解决方法具体见android studio的安装(补充篇gradle失败的问题更新于 2021-03-10)_iterhuiの博客-CSDN博客_android studio安装失败

二. 导入项目

在github上下载MiCode/Notes: 小米便签社区开源版

然后解压

打开Android Studio,选择import Project(Gradle,Eclipse ADT)的方式导入项目,导入项目后耐心等待

解决Could not find com.android.tools.build:gradle:7.0.2.(各种版本)或者time out

首先判断版本是否为自己需要的(个人用的是7.0.2)

打开build.gradle(:app)文件

添加两行google(),修改中间classpath参数里面的版本号

image-20210916014105053

其次打开gradle-wrapper.properties文件(位于Gradle Scripts文件夹下)将distributionPath改为你想要的版本,注意:如果是gradle-x.x.x-all.zip,应改为bin.zip,然后点击try Again

image-20210916014548223

如果出现如下所示画面则显示build成功,接着点击正上方的绿色锤子按钮make Project,若没成功则是gridle版本的问题(打开C盘→用户→用户名→.gradle文件夹→wrapper文件夹→dist文件夹→找到相应版本的bin文件夹,可以删除其他没用的文件夹,如果显示正在使用则打开任务浏览器结束java对应的进程即可→进入乱码文件夹→只要里面存在对应版本的bin的压缩包则说明正常)

image-20210916014829033

接下来我们解决make project过程中出现的问题

解决Cannot Resolve Symbol HttpEntity,HttpResponse

image-20210916014926550

报错原因及解决方法:HTTP client在sdk23就已经被分离了,应该使用HttpURLConnection来代替,或者将下面的代码加入到你的build.gradle(:app)文件中

image-20210915235349128

android{
    useLibrary 'org.apache.http.legacy'
}
  • 1
  • 2
  • 3

点击Sync Now(第一次修改)或者try again(多次修改),然后会出现下面的界面

image-20210915235524411

解决Google Play requires that apps target API level 29 or higher

原因:之前我们将下载源改为了谷歌(之前添加的google()),但是api的版本不同步,故需要修改使之同步

image-20210915235625249

将下图中两处分别改为30和29,然后点击Sync Now

image-20210916005307494

解决Cannot resolve method ‘setLatestEventInfo’ in ‘Notification’

image-20210916000030227

原因:在低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法;而在高于API Level 11的版本中setLatestEventInfo()函数已经被弃用了,于是我们需要根据现有的Android版本进行相应地重写该函数

我们首先看一下setLatestEventInfo()的接口所代表的含义是什么

notification.setLatestEventInfo(context, title, message, pendingIntent);
//第一个参数表示作用的Context对象,第二个参数表示通知的标题,第三个参数表示消息内容,第四个参数表示点击通知后跳转的页面
  • 1
  • 2

通过调研发现对于Android的不同版本与之对应的实现

低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法。

Intent intent = new Intent(this,MainActivity); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
notification.setLatestEventInfo(context, title, message, pendingIntent);     
manager.notify(id, notification); 
  • 1
  • 2
  • 3
  • 4

高于API Level 11,低于API Level 16 (Android 4.1.2)版本的系统中,可使用Notification.Builder来构造函数。但要使用getNotification()来使notification实现。此时,前面版本在notification中设置的Flags,icon等属性都已经无效,要在builder里面设置。

Notification.Builder builder = new Notification.Builder(context) 
      .setAutoCancel(true) 
      .setContentTitle("title") 
      .setContentText("describe") 
      .setContentIntent(pendingIntent) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setWhen(System.currentTimeMillis()) 
      .setOngoing(true); 
notification=builder.getNotification(); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

高于API Level 16的版本,就可以用Builder和build()函数来配套的方便使用notification了。

Notification notification = new Notification.Builder(context)  
     .setAutoCancel(true)  
     .setContentTitle("title")  
     .setContentText("describe")  
     .setContentIntent(pendingIntent)  
     .setSmallIcon(R.drawable.ic_launcher)  
     .setWhen(System.currentTimeMillis())  
     .build();  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在本实践中由于我的Android版本介于11到16之间(可以试一下以上两种方法就知道自己的Android版本了,一种报关于Android版本的错误如无法解析build()之类的,就知道Android版本了),故采用第二种方案

以下是我自己重写的整个showNotification方法

private void showNotification(int tickerId, String content) {
        PendingIntent pendingIntent;
        if (tickerId != R.string.ticker_success) {
            pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
                    NotesPreferenceActivity.class), 0);

        } else {
            pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
                    NotesListActivity.class), 0);
        }


        Notification.Builder builder = new Notification.Builder(mContext)
                .setAutoCancel(true)
                .setContentTitle(mContext.getString(R.string.app_name))
                .setContentText(content)
                .setContentIntent(pendingIntent)
                .setWhen(System.currentTimeMillis())
                .setOngoing(true);
        Notification notification=builder.getNotification();
        mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
解决Missing URL

打开app文件夹下的manifests文件夹的AndroidManifest.xml文件,发现该文件有如下错误

image-20210916002837067

点击编辑区的错误代码的红色灯泡按钮,按照如下提示修改(set scheme=”http“)

image-20210916002940001

修改后发现还是报错,于是将鼠标移动到报错代码的第一行,继续点击红色灯泡,按照提示修改(Suppress:Add tools…)

image-20210916003259921

解决Missing permissions required by AccountManager.getAccountsByType: android.permission.GET_ACCOUNTS

如果出现这种错误,大概率是版本不同的情况下权限设置方法不同的问题,可以看看之前解决Google Play requires that apps target API level 29 or higher那一步中的Android的版本,如果将两个都改为31(根据系统提示),则会报上述错误,若改为30和29,则正常

解决EventQueue.isDispatchThread()=false Toolkit.getEventQueue()=com.intellij.ide.IdeEventQueue@eba8d23

如果报此类错误,则大概率是内存不够的缘故,,打开人物管理器关闭一些不用的软件或占用内存较大的软件,重新打开一次android studio,重新试一下即可

开始运行项目

点击图中的绿色的锤子(build),如果显示build successful,则表示成功构建项目

image-20210916010837511

接下来选择虚拟设备,开始运行项目

点击AVD Manger

image-20210916011020093

点击create virtual device

image-20210916011106862

选择pixei 2(较为美观)

image-20210916011348724

选择R,点击next

image-20210916011433893

取个名字,点击finish

image-20210916011511389

退出设置页面,选择刚刚创建的虚拟设备,点击运行

image-20210916011640084

过程较慢,耐心等待,如果出现以下效果则说明成功

image-20210916012524856

如果意外终止,则说明有可能是内存不够,重启下电脑再次运行就好了。

三.分析

自己研究吧

参考博客:

Androidn Notification的使用,解决找不到setLatestEventInfo方法 - 风雪江山 - 博客园 (cnblogs.com)

android - Cannot Resolve Symbol HttpEntity,HttpResponse - Stack Overflow

android studio的安装(补充篇gradle失败的问题更新于 2021-03-10)_iterhuiの博客-CSDN博客_android studio安装失败

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/552827
推荐阅读
  

闽ICP备14008679号