Android 如何创建无活动的广播接收器
我想创建一个应用程序,将响应接收短信,并显示一个对话框。如何在清单中注册接收方而不在活动中定义 我试图将清单中的receiver/intent filter标记保留在activity标记之外,但emulator不会安装apk,因为没有启动活动。将BroadcastReceiver保留为主活动会导致Logcat中出现“无法实例化活动”错误 有什么帮助吗 谢谢, 晴朗的 接收器类别Android 如何创建无活动的广播接收器,android,sms,broadcastreceiver,Android,Sms,Broadcastreceiver,我想创建一个应用程序,将响应接收短信,并显示一个对话框。如何在清单中注册接收方而不在活动中定义 我试图将清单中的receiver/intent filter标记保留在activity标记之外,但emulator不会安装apk,因为没有启动活动。将BroadcastReceiver保留为主活动会导致Logcat中出现“无法实例化活动”错误 有什么帮助吗 谢谢, 晴朗的 接收器类别 public class SMSReceiver extends BroadcastReceiver { // o
public class SMSReceiver extends BroadcastReceiver {
// onCreat is invoked when an sms message is received.
// Message is attached to Intent via Bundle, stored in an Object
// array in the PDU format.
public void onReceive(Context context, Intent intent) {
// get the SMS message passed in from Bundle
Bundle bundle = intent.getExtras();
String bodyText = "";
String from = "";
if (bundle != null) {
//Retrieve sms message within Object array
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i=0; i < msgs.length; i++)
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message: msgs) {
bodyText = message.getMessageBody();
from = "Message from " + message.getOriginatingAddress() + ": ";
}
// Display message in pop up
Toast.makeText(context, from + bodyText, Toast.LENGTH_SHORT).show();
}
}
}
公共类SMSReceiver扩展了BroadcastReceiver{
//当收到sms消息时调用onCreat。
//消息通过存储在对象中的Bundle附加到Intent
//PDU格式的数组。
公共void onReceive(上下文、意图){
//获取从Bundle传入的SMS消息
Bundle=intent.getExtras();
字符串bodyText=“”;
字符串from=“”;
if(bundle!=null){
//在对象数组中检索sms消息
Object[]pdus=(Object[])bundle.get(“pdus”);
SmsMessage[]msgs=新SmsMessage[pdus.length];
对于(int i=0;i
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="home.splttingatms.SMSReceiver" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SMSReceiver"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>
您试图做的是错误的,至少有以下原因
简言之,创建一个简单的活动,它将出现在“所有应用程序”中,并具有主/启动器意图设置,当它启动时,只需创建一个对话框,对用户说“嗨,欢迎光临…”或其他一些反馈,让他们知道事情已经正确启动。对话框上有一个“确定”按钮,按下该按钮时,调用活动的finish()方法,使接收器保持在原位。隐藏
活动的一种方法是在应用程序的Android清单文件中使用以下主题:
<activity
android:name=".SomeActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注意:使用此选项确实会使你的应用程序在启动时不显示,但它仍然不会删除启动器图标。如果你删除了图标,你将无法启动应用程序。(想办法绕过这个问题!)来自:
没有结果从接收器传播,接收器不能中止广播。如果要允许接收器传播结果或中止广播,则必须使用sendOrderedBroadcast(意图,字符串)发送有序广播
改用我实施了一项“反馈”活动,提醒用户程序正在运行。我的另一个问题是,以对话框为主题的活动会出于某种原因弹出反馈窗口,但调用finish()方法是有效的。谢谢你的帮助。我很高兴这对你有用-祝你其余的代码好运。我尝试过做类似的事情,实际上更简单,因为我只想在旋转屏幕时在状态栏中得到一个通知。在模拟器上没有这样的运气。查看我的答案查看我的答案我只是在搜索同一个问题时发现了这个,并认为我已经把它放在这里了。希望它能帮助别人!