2016-01-13 171 views
0

我想在启动通知(如Messages,Viber通知,WhatsApp等)并行重启后启动锁屏活动如何做???我制作了一个广播接收器,它接收BOOT_COMPLETED动作并开始启动与Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON意图过滤器和接收器再次注册同一接收器服务启动锁屏activity.Here是我的代码:如何在重新启动后立即启动锁屏活动?

AndroidManifest.xml中

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" ></uses-permission> 

<receiver> 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
</receiver> 

,当然我宣布清单中的服务。

这里是我的广播接收器类

public class LockScreenBroadCastReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.d("BroadCastReceiver", "ReceivedIntent"); 

    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 

    Intent myIntent = new Intent(context, LockScreenActivity.class); 
    myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    myIntent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 

    if (!LockScreenActivity.isActivityRunning) { 
    context.startActivity(myIntent); 
    }else{ 
    Log.d("BroadCasrReceiver","LockScreenActivity is running"); 
    } 

    }else if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { 
    Log.v("LockScreenBroadReceiver","boot completed"); 
    Intent startServiceIntent = new Intent(context,LockScreenService.class);    
    context.startService(startServiceIntent); 
} 
} 
} 

和服务类:

公共类LockScreenService延伸服务{

LockScreenBroadCastReceiver broadCastReciever; 
public static boolean isRunning; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    isRunning = true; 
    registerReceiver(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    isRunning = false; 
    unregisterReceiver(broadCastReciever); 
    Log.d("LockScreenReceiver", "ReceiverUnregistered"); 
    sendBroadcast(new Intent("RestartLockScreenService")); 
} 

private void registerReceiver(){ 
    IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF); 
    intentFilter.addAction(Intent.ACTION_SCREEN_ON); 
    broadCastReciever = new LockScreenBroadCastReceiver(); 
    registerReceiver(broadCastReciever,intentFilter); 
    Log.d("LockScreenReceiver", "ReceiverRegistered"); 
} 
} 

这种做法是working.However,这是非常缓慢因为广播接收机收听BOOT_COMPLETED广播,等待设备完全启动并工作。因此,您可以锁定和解开在锁屏工作之前多次给手机打电话。任何想法?

回答

0

可以使用的IntentFilter instace BootComplate在manifist这样的:

<action android:name="android.intent.action.USER_PRESENT" /> 
+0

感谢您answer.unfortunately,这并没有这样的伎俩,还有开机后一些延迟和用户锁定和解锁之前手机的2-3倍我的自定义锁定屏幕活动出现。 –

0

我有同样的问题。它被固定包括在接收器上的

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

。这是一个轻微的延迟6秒重新启动,我试图缩小范围。

我希望这对你的作品

+1

谢谢你的帮助! 。这与我的情况一样,现在我的平均延迟时间为几秒钟,正如你所提到的。我也使用这个XML标签。我试图通过在某处寻找一些教程来获得更好的结果。我觉得没有太多关于这个话题的文件。如果你找到一个好的,请将它转发给我。 –

相关问题