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());
    }


}