2012-11-19 102 views
0

我正在使用闹钟服务来保持我的应用程序在手机锁定和屏幕关闭但无法使用时运行。设备处于锁定状态且屏幕处于关闭状态时,如何运行我的应用程序?

我报警服务类是:

public class AlarmService extends BroadcastReceiver { 

    // Restart service every 60 seconds 
    private static final long REPEAT_TIME = 1000 * 60; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    AlarmManager service = (AlarmManager) context 
     .getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, StartUp_broadcast.class); 
    PendingIntent pending = PendingIntent.getBroadcast(context, 0, i, 
     PendingIntent.FLAG_CANCEL_CURRENT); 
    Calendar cal = Calendar.getInstance(); 
    // Start 60 seconds after boot completed 
    cal.add(Calendar.SECOND, 60); 
    // 
    // Fetch every 60 seconds 
    // InexactRepeating allows Android to optimize the energy consumption 
    service.setRepeating (AlarmManager.RTC_WAKEUP, 
     cal.getTimeInMillis(), REPEAT_TIME, pending); 

    // service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
    // REPEAT_TIME, pending); 

    } 
} 

和我brodcast服务类是:

public class StartUp_broadcast extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    Intent myIntent = new Intent(context, AlarmService.class); 
    PendingIntent pendingIntent = PendingIntent. 
            getService(context, 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager) context 
           .getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
        System.currentTimeMillis() + 1000, 1000, pendingIntent); 
    Intent Startup_Intent = new Intent(context, LocationService.class); 
    Startup_Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startService(Startup_Intent); 
} 

} 

我的主要活动类有PowerManager的服务为激活锁定

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeUp"); 
    wl.acquire(1000); //wake up the screen 
    setContentView(R.layout.main); 

    this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 

请帮助我。如何在移动设备被锁定并关闭时保持我的应用程序运行?

回答

0

你的代码是正确的,只是你需要改变你的报警变量类级别中包含static修饰符,

public class AlarmService extends BroadcastReceiver 
{ 
    private static Intent myIntent; 
    private static AlarmManager service; 
    private static PendingIntent pendingIntent; 
    . 
    . 
    . 
} 
+0

当手机被锁定时,对于某些HTC设备来说,真的不可能解锁设备并将您的应用放在前台。我在HTC Nexus中测试过,它没有工作。但是一些三星手机能够解锁设备。 –

+0

好的,我不知道解锁,但不断运行报警我的上面的代码工程优秀:) – Lucifer

+0

@Lucifer:它只适用于一分钟,它再次不运行的应用程序,并没有更新:(我想要的应用程序即使它被锁定,屏幕关闭等连续工作..请指导 – Mickel

0

我可以建议你一个thing..when您的应用程序将启动,或服务将开始,可能你可以尝试解锁键盘。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

因此,当您的应用程序运行时,它将解锁钥匙保护并保持屏幕亮起。而当服务停止时,再次锁定钥匙后卫。

注意:不要使用PowerManager类。因为它会很快耗尽电池。我面临这个问题。

谢谢。

+0

感谢Arindam Mukherjee :) – Mickel

相关问题