【问题标题】:Boot/ScreenOn Broadcast Receiver not workingBoot/ScreenOn 广播接收器不工作
【发布时间】:2011-12-28 06:40:12
【问题描述】:

我有一个空白的 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进程)意外停止。再试一次”

【问题讨论】:

  • SCREEN_ON 在清单中不起作用

标签: android broadcastreceiver boot


【解决方案1】:

折腾了半天,解决了上面的问题。

注册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>

享受吧!

【讨论】:

    【解决方案2】:

    删除android-permission="android.permission.RECEIVE_BOOT_COMPLETED"。为此权限添加一个&lt;uses-permission&gt; 元素作为&lt;manifest&gt; 元素的子元素。

    如果问题仍然存在,请使用adb logcat、DDMS 或 Eclipse 中的 DDMS 透视图查看 LogCat 并检查与您的崩溃相关的堆栈跟踪。

    Here is a sample project 显示如何在启动时获得控制权。

    SCREEN_ON 在清单中不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多