Android 如何将一个BroadcasReceiver和另一个activity同时作为启动器活动来实现
我有两个启动器活动,Android 如何将一个BroadcasReceiver和另一个activity同时作为启动器活动来实现,android,android-activity,android-manifest,Android,Android Activity,Android Manifest,我有两个启动器活动, 1.作为广播接收器的接收器活动。 2.应该是主启动器活动的活动 当SMS到达时,接收器活动启动.main活动(BroadcastReceiver),并进一步启动一项服务。(无GUI)且无需打开设置活动。 另一个活动.Settings是主启动器活动 我想要实现的目标: 当sms到达时,接收器活动按原样工作。但是当我想更改设置时,设置活动开始 Manifest.xml <?xml version="1.0" encoding="utf-8"?> <manife
1.作为广播接收器的接收器活动。
2.应该是主启动器活动的活动 当SMS到达时,接收器活动启动
.main活动
(BroadcastReceiver),并进一步启动一项服务。(无GUI)且无需打开设置
活动。另一个活动
.Settings
是主启动器活动
我想要实现的目标:当sms到达时,
接收器
活动按原样工作。但是当我想更改设置时,设置活动开始
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aa"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.RECEIVE_SMS" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.aa.FindLocation"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.aa.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.example.aa.Settings"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.aa.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MainActivity"
android:enabled="false" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
<service android:name=".Servc" >
<intent-filter>
<action android:name="com.example.Servc" />
</intent-filter>
</service>
</application>
</manifest>
问题1.
[2014-07-06 02:55:14-Aa]将Aa.apk上传到设备“S5830f4524b76”上
[2014-07-06 02:55:14-Aa]安装Aa.apk…
[2014-07-06 02:55:18-Aa]成功
[2014-07-06 02:55:18-Aa]启动设备S5830f4524b76上的活动com.example.Aa.Settings
[2014-07-06 02:55:19-Aa]活动管理器:启动:Intent{act=android.Intent.action.MAIN cat=[android.Intent.category.LAUNCHER]cmp=com.example.Aa/.Settings}
2.
清单中应该做哪些更改才能使其正常工作?不要在清单中定义sms接收器。移除它 通过在清单中定义以下元素,创建启动时运行的广播接收器:
<receiver android:name=".BootUpReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
SmsReceiver
是您的广播接收器。例如:
public class SmsReceiver extends BroadcastReceiver {
void setActivityHandler(){
//instantiate member variables if required
}
@Override
public void onReceive(Context context, Intent intent) {
Bundle pdusBundle = intent.getExtras();
Object[] pdus=(Object[])pdusBundle.get("pdus");
SmsMessage messages=SmsMessage.createFromPdu((byte[]) pdus[0]);
Log.d("tag","message body : " + messages.getMessageBody());
}
}
您所说的“当SMS到达时,接收方活动启动.main活动”是什么意思。我在你的清单中没有看到任何“接收者活动”。我想你的意思是“.MainActivity在收到短信时启动”。[2014-07-06 04:47:04-Aa]ActivityManager:Starting:Intent{act=android.Intent.action.MAIN cat=[android.Intent.category.LAUNCHER]cmp=com.example.Aa/.Settings}SmsReceiver不是预定义的类。。。
SmsReceiver
中应该包含什么?用您的sms BroadcastReceiver类替换SmsReceiver
。在您的情况下,它应该是MainActivity
。
public class SmsReceiver extends BroadcastReceiver {
void setActivityHandler(){
//instantiate member variables if required
}
@Override
public void onReceive(Context context, Intent intent) {
Bundle pdusBundle = intent.getExtras();
Object[] pdus=(Object[])pdusBundle.get("pdus");
SmsMessage messages=SmsMessage.createFromPdu((byte[]) pdus[0]);
Log.d("tag","message body : " + messages.getMessageBody());
}
}