http://blessdyb.iteye.com/blog/628338
目前需要开发一个开机自启动的GTD应用程序来提醒用户的一些重要日程安排,对于这类应用,Android提供了一个BroadcastReceiver组件来对于应用程序的运行环境进行监听,并对于各种事件进行对应的处理。使用BroadcastReceiver十分简单,我们只需要在AndroidManifest.xml或者我们的代码中进行相应的注册(这也是Android开发的两种方式)。这样之后在广播事件到来时,我们就能通过重写BroadcastReceiver的onReceive()方法来执行相应的操作。
下面简单来演示如何开发开机自启动应用。
1.建立一个名为Boot的Android应用。
2.简单实现BootActivity的应用界面,在此实现了一个TextView的实例来开机后显示一句话内容。
TextView textView=new TextView(this);
textView.setText("这是一个开机自启动应用程序");
setContentView(textView);
3.创建一个BootBroadcastReveiver的类,实现了抽象类BroadcastReceiver。以下是整个代码。
package com.blessdyb.boot;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Intent bootActivityIntent=new Intent(context,BootActivity.class);
bootActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(bootActivityIntent);
}
}
}
4.在AndroidMenifest.xml中配置Receiver。如下图我们在Android Menifest Application中进行配置。
其结果即为如下XML配置(application子目录):
<receiver android:name=".BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
5.当然,我们需要对我们的应用进行权限许可,只有通过这种形式才能真正地让我们的应用程序实现开机自启动。我们需要在AndroidMenifext.xml中进行如下配置。
配置完成后,会在XML文件中以如下形式显示(menifext子目录)
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/ >
之后,我们就可以对自己的应用程序进行签名,打包手就可以在手机上进行真机测试了。
Posted on 2009-02-08 21:55
十二号的国王阅读(9040)
评论(6)编辑收藏
1.首先开机
启动后系统会发出一个Standard Broadcast Action,名字叫
android.intent.action.BOOT_COMPLETED,这个Action只会发出一次。
2.构造一个
IntentReceiver类,
重构其抽象方法
onReceiveIntent(Context context, Intent intent),在其中启动你想要启动的Service。
3.在
AndroidManifest.xml中,首先加入
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>来获得BOOT_COMPLETED的使用许可,然后注册前面重构的IntentReceiver类,在其
<intent-filter>中加入
<action
android:name="android.intent.action.BOOT_COMPLETED" />,以使其能捕捉到这个Action。
一个例子
xml:
<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
<receiverandroid:name=".OlympicsReceiver"android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</receiver>
java:
publicclassOlympicsReceiverextendsIntentReceiver
{
/*要接收的intent源*/
staticfinalStringACTION="android.intent.action.BOOT_COMPLETED";
publicvoidonReceiveIntent(Contextcontext,Intentintent)
{
if(intent.getAction().equals(ACTION))
{
context.startService(newIntent(context,
OlympicsService.class),null);//启动倒计时服务
Toast.makeText(context,"OlympicsReminderservicehasstarted!",Toast.LENGTH_LONG).show();
}
}
}
注意:现在的IntentReceiver已经变为BroadcastReceiver,OnReceiveIntent为onReceive。所以java这边的代码为:
(也可以实现应用程序开机自动启动)
publicclassOlympicsReceiverextendsBroadcastReceiver
{
/*要接收的intent源*/
staticfinalStringACTION="android.intent.action.BOOT_COMPLETED";
publicvoidonReceive(Contextcontext,Intentintent)
{
if(intent.getAction().equals(ACTION))
{
context.startService(newIntent(context,
OlympicsService.class),null);//启动倒计时服务
Toast.makeText(context,"OlympicsReminderservicehasstarted!",Toast.LENGTH_LONG).show();
//这边可以添加开机自动启动的应用程序代码
}
}
}
BroadcastReceiver 广播
http://www.iteye.com/topic/1115903
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
上面讲了很多关于广播的很多基础概念,那么BroadcastReceiver在实际的应用中到底会起到样的作用呢?
因为广播是一个系统级别的监听器,所以它可以将不同进程间通信的一个“纽带”。举个简单的例子,我们知道在我们启动service是如果用startService这种方式启动时,访问者和service之间是不能进行数据的“互动”的,但是有了BroadcastReceiver就一样可以进行互动,方法我大致说一下,在activity端创建一个broadcast,同样在service端也创建一个broadcast,相互监听对方的动作,这样就可以达到进程间通信的目的了。
BroadcastReceiver还可以监听系统进程,比如android的收短信,电量低,电量改变,系统启动,等……只要BroadcastReceiver监听了这些进程,就可以实现很多有趣的功能,比如,接收短信的这条广播是一条有序广播,所以我们可以监听这条信号,在传递给真真的接收程序时,我们将自定义的广播接收程序的优先级大于它,并且取消广播的传播,这样就可以实现拦截短信的功能了。
下面是短信拦截代码:
Java代码
-
packagewuchen.broadcastReceiver;
-
-
importandroid.content.BroadcastReceiver;
-
importandroid.content.Context;
-
importandroid.content.Intent;
-
importandroid.os.Bundle;
-
importandroid.telephony.SmsMessage;
-
importandroid.widget.Toast;
-
-
-
publicclassSmsReceiverextendsBroadcastReceiver
-
{
-
-
@Override
-
publicvoidonReceive(Contextcontext,Intentintent)
-
{
-
-
if(intent.getAction().equals(
-
"android.provider.Telephony.SMS_RECEIVED"))
-
{
-
-
abortBroadcast();
-
StringBuildersb=newStringBuilder();
-
-
Bundlebundle=intent.getExtras();
-
-
if(bundle!=null)
-
{
-
-
Object[]pdus=(Object[])bundle.get("pdus");
-
-
SmsMessage[]messages=newSmsMessage[pdus.length];
-
for(inti=0;i<pdus.length;i++)
-
{
-
messages[i]=SmsMessage
-
.createFromPdu((byte[])pdus[i]);
-
}
-
-
for(SmsMessagemessage:messages)
-
{
-
sb.append("短信来源:");
-
-
sb.append(message.getDisplayOriginatingAddress());
-
sb.append("\n------短信内容------\n");
-
-
sb.append(message.getDisplayMessageBody());
-
}
-
}
-
Toast.makeText(context,sb.toString()
-
,5000).show();
-
}
-
}
-
}
清单文件
-
Xml代码
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
-
package="wuchen.broadcastReceiver"
-
android:versionCode="1"
-
android:versionName="1.0">
-
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
-
<receiverandroid:name=".SmsReceiver">
-
<intent-filterandroid:priority="800">
-
<actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>
-
</intent-filter>
-
</receiver>
-
</application>
-
-
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
-
</manifest>
分享到:
相关推荐
Android 开机自启动应用, BOOT_COMPLETED
可以实现手机开机重启的时候自启动,程序简单易懂,有注释,是利用广播实现的
安卓电视盒子设置开机自动启动应用软件
可以实现安卓开机时自动启动开发的应用程序!此demo直接导入运行即可
NULL 博文链接:https://hanbaohong.iteye.com/blog/2209003
Android开发之设置开机自动启动的几种方法 方法一: <!-- 开机启动 --> <receiver android:name=.AutoStartReceiver> <action android:name=android.intent.action.BOOT_COMPLETED/> <category android:...
android上怎样让一个Service开机自动启动 Posted on 2009-02-08 21:55 hk_king 阅读(168) 评论(0) 编辑 收藏 网摘 所属分类: 移动开发 转载出处:http://www.androidlab.cn/viewthread.php?tid=421&extra=page%3D1...
Android应用源码开发Demo,主要用于毕业设计学习。
开机自动根据包名检测APP运行状态 ,使app一直运行在前台,我们用一个后台服务来监测这个app的运行情况。如果这个app被人为退出了,或者遇到bug崩溃了,就要重新启动,免得丢失数据。
我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户在运行的服务中手动停止该服务以后,过了一段时间...
原理:Android系统在开机的时候会发出一个广播。这样我们就可以接收这个广播,然后启动我们的应用。广播接收器必须在xml里面配置,因为xml里面配置的广播接收器 是不随着应用的退出而退出的。 广播接收器: ...
Android应用源码开发Demo,主要用于毕业设计学习。
《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...
《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...
《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...
《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...
《google android sdk开发范例大全(第3版)》在上一版的基础上,以android手机应用程序开发(采用android sdk 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...
要不怎么说Android特别开放呢,在Android开发中,只要发送一个广播,就可以实现这种需求了。 废话不多说,以下是封装好的一段代码。 代码如下:public class ShortcutUtil { public static void createShortCut...
在开发(或打包)时,请注意,此应用程序需要使用与Termux主应用程序相同的密钥签名,才能获得执行脚本的权限。 安装 Termux:Boot应用程序可以从获得。 此外,我们为那些想试用最新功能或测试他们的请求请求的人...