在重启时加速BroadcastReceiver的启动

时间:2017-02-24 20:24:43

标签: java android android-intent broadcastreceiver

我是一个应用,用户可以通过该应用调用自定义锁屏来锁定他/她的手机,这是一项名为LockScreen.class的活动。 加载一个这个屏幕,即设备被锁定,被称为SharedPreferences的{​​{1}}被指定为真。 一旦用户通过锁定屏幕执行他需要的操作,此IsLocked就会变为假,并且移动设备将恢复正常。

每个人都按预期正常工作。

问题是,如果由于某种原因移动设备在islocked屏幕处于活动状态时已重新启动,则在重新启动时它不会重新运行。

所以,我创建了一个lock如下所示,这很好但是在重启过程完成后,用户可以在加载之前做很多事情,我的问题是BootReciever所以在让用户有机会对移动设备做任何事情之前,移动屏幕会再次使用自定义活动锁定吗?

how can I make it loaded faster?

最明显的文件的一部分是:

public class BootReciever extends BroadcastReceiver
{

    SharedPreferences mPrefs;
    final String IsLockedPref = "IsLocked";

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

        mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
        Boolean islocked = mPrefs.getBoolean(IsLockedPref, false);

        Intent i;
        if (islocked)
            i = new Intent(context, LockScreen.class);
        else
            i = new Intent(context, MainActivity.class);

        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }
}

更新

我尝试通过添加以下内容授予<receiver android:name=".BootReciever" android:enabled="true" android:exported="true"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 来使用this,但没有任何改进:

主要活动:

Device Admin

并创建空接收器以将DeviceAdminReceiver扩展为:

    private static final int ADMIN_INTENT = 15;
    private static final String description = "Some Description About Your Admin";
    private DevicePolicyManager mDevicePolicyManager;
    private ComponentName mComponentName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

       mDevicePolicyManager = (DevicePolicyManager)getSystemService(
                this.DEVICE_POLICY_SERVICE);
        mComponentName = new ComponentName(this, AdminReceiver.class);
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,description);
        startActivityForResult(intent, ADMIN_INTENT);
.
.
}

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == ADMIN_INTENT) {
            if (resultCode == RESULT_OK) {
                Toast.makeText(getApplicationContext(), "Registered As Admin", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(getApplicationContext(), "Failed to register as Admin", Toast.LENGTH_SHORT).show();
            }
        }
    }

并将以下内容添加到最清晰的地方:

public class AdminReceiver extends DeviceAdminReceiver {

}

1 个答案:

答案 0 :(得分:1)

您可以做的一件事就是为intent-filter设置优先级。来自documentation

  

它控制广播接收器执行接收广播消息的顺序。具有较高优先级值的那些在具有较低值的那些之前被调用。

<intent-filter 
    android:priority="100">
        ...
</intent-filter>
  

值必须是整数,例如&#34; 100&#34;。数字越大,优先级越高。默认值为0.该值必须大于-1000且小于1000。