当我使用广播接收器时应用程序崩溃

时间:2012-02-10 05:23:52

标签: android android-intent broadcastreceiver intentfilter

我想从广播接收器启动服务,该接收器采用“android.intent.action.BOOT_COMPLETED”。当我在eclipse中点击应用程序并启动它时运行良好。但是当我从已经安装它的模拟器启动它时,应用程序崩溃了。以下是源代码。

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.newsreader"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="13"
    android:targetSdkVersion="15" />
<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:logo="@drawable/logo"
    android:theme="@style/NewsReaderStyle" >

    <receiver
        android:name=".StartupIntentReceiver"
        android:enabled="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
    <service android:name=".LoadFeedsService" ></service>

    <activity
        android:name=".NewsReaderActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ArticleActivity"
        android:theme="@style/NewsReaderStyle_NoActionBar" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>*

我的 BroadCast接收器

*package com.example.android.newsreader;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class StartupIntentReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
    Log.i("reciever", "recieved intent"+ intent);
    Intent serviceIntent = new Intent(context, LoadFeedsService.class);

    context.startService(serviceIntent);
}
 }*

先谢谢。

2 个答案:

答案 0 :(得分:2)

修改您的接收者代码,如下所示,然后尝试。

    <receiver
        android:name=".StartupIntentReceiver"
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
    </receiver>

如果上述修改不起作用,请按以下方式修改服务并尝试。

<service 
    android:name=".LoadFeedsService">
    <intent-filter >
        <action android:name="testapp.BACKGROUND_SERVICE" />                
    </intent-filter>            
</service>

在接收器的java代码中修改如下。

Intent serviceIntent = new Intent("testapp.BACKGROUND_SERVICE");

我希望它可以帮助你。

答案 1 :(得分:0)

当您的应用程序已经安装在模拟器中并且您尝试在您的电子邮件程序中再次安装该应用程序时,安装将被全新安装所覆盖。此过程有时会导致一些问题,如应用程序崩溃,因为新安装不是一个干净的构建它是一个被覆盖的构建。所以请记住,每当您对代码进行一些重大更改时,首先卸载已有的应用程序然后重新安装它总是更好。