androidmanifest多个接收器

时间:2011-11-08 20:04:01

标签: android android-manifest

我在清单文件中有两个接收器。一个是工作一个不是。我可以在清单中有多个接收器吗?

<receiver android:name=".services.MobileViaNetReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>

<receiver android:name=".services.SessionManager">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_OFF"></action>
        <action android:name="android.intent.action.ACTION_SHUTDOWN"></action>
        <action android:name="android.intent.action.SCREEN_ON"></action>
    </intent-filter>
</receiver>

UPDATE&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;

行动关机正在为我工​​作。以下是SessionManager的代码

public class SessionManager extends BroadcastReceiver{
Date timeOff;
Date timeOn;


@Override
public void onReceive(Context context, Intent intent) {     

    if( "android.intent.action.SCREEN_OFF".equals(intent.getAction())) {
        timeOff = Calendar.getInstance().getTime();
    } 

    if( "android.intent.action.ACTION_SHUTDOWN".equals(intent.getAction())) {
        Functions.logout(context);
    } 

    if( "android.intent.action.SCREEN_ON".equals(intent.getAction())) {
        timeOn = Calendar.getInstance().getTime();
        long diffInMs = timeOn.getTime()-timeOff.getTime();

        // convert it to Minutes
        long diffInMins = TimeUnit.MILLISECONDS.toMinutes(diffInMs);

        if ((int) (diffInMins) > 15) {
            Functions.logout(context);

        } else {
            Log.i("MobileViaNetReceiver", "User still active");
        }
    }   
}

}

2 个答案:

答案 0 :(得分:0)

好的,因为你肯定得到SHUTDOWN意图,你的广播接收器正在工作。但这并不意味着SCREEN_ON和SCREEN_OFF实际上正在向您的应用程序发送和删除。以下是对此条件的一些解释:

android.intent.action.SCREEN_ON doesn't work as a receiver intent filter

答案 1 :(得分:0)

尝试在不起作用的接收器的意图过滤器内添加以下内容。

<category android:name="android.intent.category.DEFAULT" />