происходит сбой приложения при использовании вещательного приемника - PullRequest
0 голосов
/ 10 февраля 2012

Я хотел запустить службу из приемника широковещания, который принимает «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 ]

2 голосов
/ 10 февраля 2012

Измените код получателя, как показано ниже, и попробуйте.

    <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");

Я надеюсь, что это может помочь вам.

0 голосов
/ 10 февраля 2012

Когда ваше приложение уже установлено в эмуляторе и вы пытаетесь установить приложение снова в эмуляторе, установка перезагружена новой установкой.Эта процедура иногда вызывает некоторые проблемы, такие как сбой приложения, поскольку новая установка не является чистой сборкой, это переопределенная сборка.Поэтому всегда помните, что всякий раз, когда вы вносите большие изменения в свой код, всегда лучше сначала удалить уже существующее приложение, а затем установить его снова.

...