Boot / ScreenOn Broadcast Receiver не работает

У меня пустое приложение HelloWorld:

package tutorials.TestReceivers;

import android.app.Activity;
import android.os.Bundle;

public class TestReceiversActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

С помощью этого BootReceiver.Java:

package tutorials.TestReceivers;

import android.content.BroadcastReceiver;

public class BootReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent arg1) {
    Intent intent = new Intent(context, TestReceiversActivity.class);
        context.startActivity(intent);    
    }
}

и этот манифест:

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TestReceiversActivity"
                  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-permission="android.permission.RECEIVE_BOOT_COMPLETED"
            android:name="development.TestReceiversActivity.BootReceiver" >
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.SCREEN_ON" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

После запуска приложения и его закрытия.

Когда я разблокирую экран (SCREEN_ON), ​​ничего не происходит.

И когда я загружаю решающее, я получаю следующее сообщение вроде:

«Приложение TestReceiversActivity (процесс tutorials.TestReceivers) неожиданно останавливается. Повторите попытку»


person David    schedule 13.11.2011    source источник
comment
SCREEN_ON не работает из манифеста   -  person Selvin    schedule 14.11.2011


Ответы (2)


После долгого разочарования я решил вышеуказанную проблему.

Правильный способ регистрации Boot Broadcast Receiver (и открытия активности в соответствии с ним):

Пустое приложение HelloWorld (TestReceiversActivity.java):

package tutorials.TestReceivers;

import android.app.Activity;
public class TestReceiversActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Другой класс загрузочного приемника (BootReceiver.java)

package tutorials.TestReceivers;

import android.content.BroadcastReceiver;
public class BootReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
         Log.d("DAVID", "Hi, Boot reciver was catch!");
         Intent i = new Intent(context, TestReceiversActivity.class);
         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(i);
       }
}

Примечание: вы должны установить флаг, чтобы он работал!

Установите манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="tutorials.TestReceivers"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
            <receiver android:name=".BootReceiver" >
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <activity android:name=".TestReceiversActivity"
                  android:label="@string/app_name">
                <intent-filter >
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
        </activity>
    </application>
 </manifest>

Наслаждаться!

person David    schedule 25.11.2011

Удалить android-permission="android.permission.RECEIVE_BOOT_COMPLETED". Добавьте элемент <uses-permission> для этого разрешения в качестве дочернего элемента <manifest>.

Если проблемы не исчезнут, используйте adb logcat, DDMS или перспективу DDMS в Eclipse, чтобы просмотреть LogCat и проверить трассировку стека, связанную с вашим аварийным завершением.

Вот пример проекта, показывающий, как получить управление во время загрузки. .

SCREEN_ON не будет работать из манифеста.

person CommonsWare    schedule 14.11.2011