标签: action

开机自启动Service

之前我们有篇关于介绍 Android 如何实现开机自启动,不过都写的是关于如何启动 Activity,本篇文章将介绍如何启动 Service。

先附上之前文章的链接,以便参考:【Android】开机自启动。

Service 的启动相比 Acitivty 而言较为繁琐,其实都是通过别的类去调用被启动类,只不过可能 Activity 大家更为熟悉,Service 比较陌生吧。

不了解 Android Service 的童鞋可以先参考下【Android】Service 生命周期 和 【Android】Service学习之本地服务 两篇文章。

下面回到正题,看看 Service 是如何实现自启动的。

和自启动 Activity 一样,我们也先需要静态注册一个广播。

随后,创建一个继承于 BroadcastReveiver 的启动类。

context.startService(new Intent(“cn.etzmico.Etzmico_AutoRunService”)); // 调用 Service
调用/启动一个 Service 比 启动一个 Activity 要容易的多。intent中的参数是一个“标签”,详情下面的内容会介绍到。

在 Manifest.xml 静态注册。

<receiver android:name=”cn.etzmico.autorunservice.BootReceiver” >
<intent-filter >
<action android:name=”android.intent.action.BOOT_COMPLETED” />

<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</receiver>

同样,需要加入权限。

<uses-permission android:name=”android.permission.RECEIVE_BOOT_COMPLETED” >
</uses-permission>

下面就来看 Service 了。

创建一个继承于 Service 的类。为了验证,我们可以在 onCreate() 方法中,打印一句话。

这里简单的说下 Service 的生命周期。

Service 也有生命周期,也有 onCrate() 等……不过 Service 还有 onStart() 和 onBind() 。

onCreate() 和 onStart() 的区别是:

onCreate() 只有在首次调用 Service 时调用。

onStart()每次调用 Service 时均调用,首次调用 Service 时也不例外。

onBind() 在bindService() 时调用(本文不涉及)。

因此我们可以根据自己所需要的,在 onCreate() , onStart() 以及 onBind() 中写入方法。

另外,Service 也是需要声明的。

我们都知道,当新建 Activity 的时候,我们需要在 Manifest.xml 中声明, Service 亦然如此,不过 Service 与之不同的是,每个 Service 都需要添加一个“标签”,这个标签在一个工程中要是唯一的,用于让系统知道我们需要调用的是哪个 Service。

<service android:name=”cn.etzmico.autorunservice.Etzmico_AutoRunService” >
<intent-filter >
<action android:name=”cn.etzmico.Etzmico_AutoRunService” />

<category android:name=”android.intent.category.default” />
</intent-filter>
</service>
intent-filter 的 actiong android:name 中的内容就是“标签”了。如果我们想启动的是这个 Service,那么在广播类中 startService() 方法中 intent 的参数就是这个“标签”;否则启动服务时会提示new Intent找不到”cn.etzmico.Etzmico_AutoRunService”(引号中具体内容视当时情况而定,即 startService() 时 intent 的参数)。

 

【Android】开机自启动

之前我们有篇关于介绍 Android 如何实现开机自启动,不过都写的是关于如何启动 Activity,本篇文章将介绍如何启动 Service。

要想在Android系统中实现开机启动,很简单,只需要几个步骤就可以了。

1.定义广播类

2.Manifest.xml中注册广播类

3.添加权限
 

下面就是具体操作了。

 

首先,我们来定义广播类。

创建一个类BootReceiver,使其继承BroadcastReceiver。

重写一些必要的Java函数

%title插图%num
package cn.etzmico;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BootReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(“android.intent.action.BOOT_COMPLETED”)) {
Log.d(“BootReceiver”, “system boot completed”);

// context, AutoRun.class
Intent newIntent = new Intent(context, AutoRun.class);

/* MyActivity action defined in AndroidManifest.xml */
newIntent.setAction(“android.intent.action.MAIN”);

/* MyActivity category defined in AndroidManifest.xml */
newIntent.addCategory(“android.intent.category.LAUNCHER”);

/*
* If activity is not launched in Activity environment, this flag is
* mandatory to set
*/
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

/* if you want to start a service, follow below method */
context.startActivity(newIntent);

}
}
}
 

AutoRun.class就是程序运行的Activity。
其次,在Manifest.xml中注册广播类

%title插图%num

*后,再添加上权限就可以了

%title插图%num

这样,我们就实现了Android系统的开机自启动,切勿忘记Manifest.xml中的操作!

资源有两个,他们本质上是一样的。程序运行后,把虚拟机或手机之类的移动设备关闭,之后重新启动;当系统程序加载外币后,我们的程序就会运行。

如果想隐藏,那么只需要加上finish();就可以了。我在程序中已经添加了一个System.out,所以finish也不用担心是否成功,只要看LogCat中是否有Successful就可以了。

有,则成功。

%title插图%num
切记要看清时间是否吻合,以免造成不必要的麻烦!

【Android】短信应用——短信信息实时获取

我们知道,只需通过代码就可以读到收件箱中的短信,发件箱中的短信;但是却没办法在短信发来的瞬间获取;如果我们在短信发来的一瞬间能得到相应的信息内容,那么我们就可以依次来展开很多应用了——也就是通过短信去远程操作一部手机。

 

如果想实时获取,就需要调用receiver了,写一个监听类,这样我们就可以实时获取短息信息了。

 

预览图:%title插图%num

 

还是来看看代码吧。

首先,我们需要创建一个监听类SMSBroadcastReceiver,让他去继承BroadcastReceiver。

再来初始化一个常量ACTION,并赋短信相关参数值。

 

android.provider.Telephony.SMS_RECEIVED
接着创建onReceive方法。

然后用getAction去监听手机短信相关动态,利用StringBuffer来保存短信信息。

 

再然后主要代码了。

%title插图%num
代码中的SMSAddress为发送短信的号码,SMSContent为短信内容。

 

要想看到是否成功获取,*简单的方法就是把这两个参数打印出来。

1|System.out.println(“发送号码:” + SMSAddress + “\n” + “短信内容:”
2|                                         + SMSContent);

不过要把他们加入for循环中,因为当新信息发来时,SMSAddress和SMSContent将被替换。

因此如果要是做应用时,也是在for循环中判断的。

*后要记得在Manifest.xml中注册监听器。

 

<receiver android:name=”cn.etzmico.SMSBroadcastReceiver”>
<intent-filter>
<action android:name=”android.provider.Telephony.SMS_RECEIVED”></action>
</intent-filter>
</receiver>

 

同时要加上权限。

 

<uses-permission android:name=”android.permission.RECEIVE_SMS”></uses-permission>
这样,我们运行程序后,只要有短信接收,SMSAddress和SMSContent就会被赋值。

 

这里顺便补充一个知识点,关于Eclipse程序的。

相信很多初学者不知道,Eclipse自带一个发短信插件,可以实现给虚拟机发送短信。这样,我们在做短信应用的时候,就不用同时启动多台虚拟机了……

如何操作呢?方法如下。

1.点击菜单栏中的 Window 窗口。

2.找到哦啊其中的 Show View 目录。

3. 选择 Other…。

%title插图%num

然后我们发现会弹出一个窗口。

%title插图%num

4,为了便于操作,我们在弹出的窗口的搜索栏中,直接输入 Emulator Control。

%title插图%num

5.点击列表中的 Emulator Control,再点OK;或者直接双击。

 

这样就出现了一个窗口,其中有很多参数。

其他的以后有机会再做介绍,我们这次至用到其中4个。

%title插图%num

如图所示,我们只需要输入对应的参数,选择需要的类型,*后点发送就可以了。

 

PS:有的人奇怪为什么灰色,没法输入,没法选择,那是因为你没有选中模拟器。这个插件只能同时给一个模拟器发送消息。关于模拟器的选择,和调用Emulator Control的方法差不多,区别只是在输入Emulator Control的时候输入 Devices 就可以了。你当前选中哪个模拟器了,就会给哪个模拟器发送消息,不需要输入模拟器号码。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速