Android Studio开发安卓5.0以上应用,使用Intent类启动Service发现语法提示不存在setClass,setAction,setAction等方法的原因
跟着教程《Android Service(二) Service使用》开发了Android Service,但由于开发中存在两个特殊性:
1. 测试机使用的是安卓版本5.1的酷派大神Note3
2. 上述教程的Intent类是在MainActivity类的方法以外定义的
导致按照上述教程以及一系列指导如何在安卓5.0版本以上使用Intent类的教程的做法修改代码后总报错。仅仅按照上述教程呢只有一个核心错误:Service Intent must be explicit。在手机上表现为点击启动按钮以后服务应用闪退,服务不能成功启动。按照该错误检索出的教程说Intent类在安卓5.0以上版本必须显式声明,但是修改下来呢错误更多,就不一一列举了,主要是Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference。直接一启动应用就闪退,连应用界面都不能待了。
改来改去宝宝心里苦啊,为什么大家都说使用setAction(),setAction()这些方法,但我的语法提示没有这些方法(仅有4个无关语法,即FilterComparison、ShortcutIconResource、ClassLoaderCreator、Creator,这些都什么鬼?),而且写出来还给这些方法红字。
绝望的我最后无意发现在类方法中引用这些方法,喜出望外地发现语法提示居然弹出了Intent类本该有的丰富方法:
为什么别人都行我不行的原因终于找到了。接下来需要采取这些教程中比较好的代码修改方案,我最终采用了《Android用Intent启动Activity的方法》这篇教程中的第1种方法,即setClass方法+startService,非常简便,亲测有效。修改后的MainActivity.java代码如下
...public class MainActivity extends AppCompatActivity {Intent intent = new Intent();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//在这里调用Intent类的setClass()方法并开启Serviceintent.setClass(this, MyService.class);startService(intent);findViewById(R.id.btn_start).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startService(intent);}});findViewById(R.id.btn_stop).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {stopService(intent);}});}
}...
开发中还有一些坑需要记录一下:
1. 根据第一篇教程的代码,正确import所有的依赖包后,仍会发现R.id.btn_start和R.id.btn_stop处提示错误,那是因为我们没有在activity_main.xml中加入ID为这两者的按钮,到activity_main.xml那里拖两个按钮,改一下ID就好。
2. “所见不一定所得”。按钮不能仅仅拖动到预览界面就行,否则虽然在预览界面上看按钮在不同的位置,但启动APP以后会发现两个按钮都堆叠到了左上角,其中一个盖住了另外一个。我们至少应该在Component Tree中点居中(Center)一下,Android Studio会帮我们自动调整按钮在预览界面中的位置,估计必须要通过点Center在xml中添加一些代码,才能达到所见即所得的效果。
3. 老项目是扶不起的阿斗。刚开始开发的时候,想起以前有一个项目一直没动,打算拿旧项目开涮,结果Gradle构建项目构建来构建去,发现Java编译器遇到了很多已经弃用(obsolete)的方法,编译出了问题,不能生成APP,最后重新建了个新项目。这里也要感谢强大的Android Studio,提示我下载了所有最新的开发所需工具,让我在这方面没有走弯路。
总之,Java类还能因为在代码中的位置不同而有能否使用类方法的差异,这一点要引以为戒。
事后想想也是,在OOP中是在方法以外只能定义变量,不能调用任何方法,否则即使写了,因为没在程序的入口,所以不能执行。看来是我急于修补,忘记了OOP代码的执行原理 Orz
Android Studio开发安卓5.0以上应用,使用Intent类启动Service发现语法提示不存在setClass,setAction,setAction等方法的原因相关推荐
- Android Studio开发安卓app TTS学习,使用TextToSpeech类完成输入文字播放中文
安卓TextToSpeech Android允许您将文本转换为语音.您不仅可以转换它,还可以用多种不同的语言说文本.Android 为此提供了TextToSpeech类.为了使用此类,您需要实例化此类 ...
- Android Studio开发安卓app 安卓与webview中的js交互
Android Studio开发安卓app 安卓与webview中的js交互 1.webview中的页面调用android中的方法 在Android Studio开发安卓app 封装WEB(H5,UR ...
- Android Studio开发安卓app 封装WEB(H5,URL)
由于项目需要,需使用安卓app封装WEB(H5)url链接,之前用的HbuilerX混合开发,但是Hhuildex的UNIAPP在线打包无法实现开机自动启动功能.需使用离线打包,就干脆学习使用andr ...
- Android Studio 开发安卓软件时下载的工程项目 Sync with gradle 失败
Sync with gradle 失败的原因有很多,其中很多时候会遇到下载下来的工程同步失败,目前的经验来看下载的工程同步失败均是由于下图中的两个配置其中某个缺少了 google() 或者 jcent ...
- Android Studio 开发系列之二:创建简单的APP启动界面
1.准备措施:准备一张用来开机的P好的照片 2.在原有项目的基础上,新建一个Activity,命名为StartActivity(这个其实无所谓,都可以) 3.将准备好的照片放入mipmap中 (1)复 ...
- 《Android Studio开发实战》学习(三)- 展示图片
<Android Studio开发实战>学习(三)- 展示图片 背景 问题描述 将图片添加到Android Studio资源中 图像视图ImageView的使用 关闭APP中标题的显示 图 ...
- Android Studio 下安卓 jni 开发错误 undefined reference to AndroidBitmap_getInfo
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 又掉坑里了 今天开发 uvc,又遇到了坑: 和之前的这个坑类似:Android Studio 下安卓 jni 开发错误 ...
- 基于TCP/IP协议的物联网安卓应用开发基础教程(Android Studio开发)
[华为云IOT物联网论坛外部版主:中华小能能] 第0章 简介 大家好,在上上上期发布的教程中,教大家如何利用Android Studio开发出一款接入华为云物联网平台并调用相关API完成设备属性查询. ...
- 使用 Android Studio 搭建安卓开发环境
使用 Android Studio 搭建安卓开发环境,方便.快捷.因为 Android SDK 等下载已经集成到 Android Studio 的安装中 1.官网下载 Android Studio ...
最新文章
- 删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!
- 项目管理中的十一个原则
- 一句话评论设计模式六大原则
- MySQL数据库:explain执行计划详解
- 微软出品 Kubernetes 最新学习指南 v3.0
- 近距离无线通信技术对比
- 今晚直播丨MySQL的查询与优化
- a lt b lt c c语言描述,《数据结构与算法分析――c语言描述》读后笔记 4
- sql 24小时格式_初学SQL,80%都会踩的5个坑
- Joey Sturgis Tones Soar for Mac(音效延迟插件)
- Python被誉为神奇的“胶水语言”,到底神奇在哪?
- adb server version not match client
- 一款GaN HEMT内匹配功率放大器设计过程详解
- 《线粒体疾病的遗传》学习笔记
- FIN断开-TCP segment of a reassembled PDU-原因分析
- D3中的each() 以及svg defs元素 clipPath的使用
- [WinError 193] %1 不是有效的 Win32 应用程序问题解决
- Excel函数教程_COLUMN和VLOOKUP实现多字段匹配
- Android Studio Offline work mode
- matlab 矩阵的n次,用matlab的for循环产生N个矩阵,怎么取第N次的矩阵?