【发布时间】:2017-02-24 20:24:43
【问题描述】:
我有一个应用程序,用户可以调用自定义锁定屏幕来锁定他/她的手机,这是一个名为LockScreen.class 的活动。
一个这个屏幕被加载,即设备被锁定,一个名为IsLocked的SharedPreferences被分配为真。
一旦用户在锁定屏幕上做他需要的事情,这个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" />
更新
我试图通过添加以下内容来授予Device Admin 来使用this,但没有任何改进:
在主Activity中:
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();
}
}
}
并创建空接收器以将 DeviceAdminReceiver 扩展为:
public class AdminReceiver extends DeviceAdminReceiver {
}
并将以下内容添加到清单中:
<receiver
android:name="AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
【问题讨论】:
标签: java android android-intent broadcastreceiver