Boot / ScreenOn Broadcast Receiver не работает - PullRequest
5 голосов
/ 14 ноября 2011

У меня есть пустое приложение 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), ​​ничего не происходит.

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

"ПриложениеTestReceiversActivity (процесс tutorials.TestReceivers) неожиданно останавливается. Попробуйте еще раз "

Ответы [ 2 ]

7 голосов
/ 25 ноября 2011

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

Правильный способ зарегистрировать 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>

Наслаждайтесь!

4 голосов
/ 14 ноября 2011

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

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

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

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

...