重新启动设备后,我的储物柜应用程序无法在Android棉花糖设备上工作
问题描述:
我正在开发应用程序更衣室应用程序。如果在kitkat版本设备应用程序锁定中安装了这个 应用程序,并且它的 工作正常。在棉花糖|(6.0)版本设备最初 应用程序正在工作,如果我们重新启动设备应用程序锁定不是 工作,锁定的应用程序打开时不询问任何密码。 如果我们只是进入应用程序(应用程序锁定应用程序),并退出应用程序其 工作完美。这次它要求密码。重新启动设备后,我的储物柜应用程序无法在Android棉花糖设备上工作
public class StartupServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
if (AppLockerPreference.getInstance(context).isAutoStart()){
if (AppLockerPreference.getInstance(context).isServiceEnabled()){
context.startService(new Intent(context, DetectorService.class));
}else{
AppLockerPreference.getInstance(context).saveServiceEnabled(false);
}
}
return;
}else if (AppLockerPreference.getInstance(context).isServiceEnabled()){
context.startService(new Intent(context, DetectorService.class));
}
}
}
public class AppLockerPreference implements OnSharedPreferenceChangeListener {
Context mContext;
public boolean isAutoStart() {
Log.d("AMK","AppLockerPreference1--->"+mApplicationList.length);
return mAutoStart;
}
public boolean isServiceEnabled() {
Log.d("AMK","AppLockerPreference2--->"+mApplicationList.length);
return mServiceEnabled;
}
public void saveServiceEnabled(boolean serviceEnabled) {
mServiceEnabled = serviceEnabled;
mPref.edit().putBoolean(PREF_SERVICE_ENABLED, mServiceEnabled);
}
public String[] getApplicationList() {
Log.d("AMK","AppLockerPreference3--->"+mApplicationList.length);
return mApplicationList;
}
public void saveApplicationList(String[] applicationList) {
mApplicationList = applicationList;
String combined = "";
for (int i=0; i<mApplicationList.length; i++){
combined = combined + mApplicationList[i] + ";";
}
mPref.edit().putString(PREF_APPLICATION_LIST, combined).commit();
}
private static final String PREF_SERVICE_ENABLED = "service_enabled";
private static final String PREF_APPLICATION_LIST = "application_list";
private static final String PREF_AUTO_START = "start_service_after_boot";
private static final String PREF_PASSWORD = "password";
/**
* Section for singleton pattern
*/
private SharedPreferences mPref;
private AppLockerPreference(Context context) {
mPref = PreferenceManager.getDefaultSharedPreferences(context);
mPref.registerOnSharedPreferenceChangeListener(this);
reloadPreferences();
}
private void reloadPreferences() {
mServiceEnabled = mPref.getBoolean(PREF_SERVICE_ENABLED, true);
mApplicationList = mPref.getString(PREF_APPLICATION_LIST, "").split(";");
Log.d("AMK","selectd apps--->"+mApplicationList);
mAutoStart = mPref.getBoolean(PREF_AUTO_START, true);
mPassword = mPref.getString(PREF_PASSWORD, "2468");
if (mPref.getBoolean("relock_policy", true)){
try{
mRelockTimeout = Integer.parseInt(mPref.getString("relock_timeout", "-1"));
}catch(Exception e){
mRelockTimeout = -1;
}
}else{
mRelockTimeout = -1;
}
}
private static AppLockerPreference mInstance;
public static AppLockerPreference getInstance(Context context){
return mInstance == null ?
(mInstance = new AppLockerPreference(context)) :
mInstance;
}
private boolean mServiceEnabled, mAutoStart;
private String[] mApplicationList;
private String mPassword;
private int mRelockTimeout;
public int getRelockTimeout(){
return mRelockTimeout;
}
public String getPassword() {
return mPassword;
}
public void savePassword(String password) {
mPassword = password;
mPref.edit().putString(PREF_PASSWORD, password);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
reloadPreferences();
}
}
你能帮我吗。
答
检查设备是否棉花糖和授予权限
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.MARSHMALLOW) {
// only for marshmallow and newer versions
}
+0
不工作...重新启动设备获取锁定的应用程序长度后。如果我们只是进入应用程序(应用程序锁定应用程序),并退出应用程序的工作完美这次它要求密码。 – Narendra
答
以下的Android 6.0(棉花糖),其只需要提清单档案中的所有权限,而在棉花糖及以上版本的所有的权限被授予由用户,你需要显示弹出权限。 一样,如果你想使用下面的权限,然后做这样的编码:
public void checkForMarshmallowPermission() {
for (int i = 0; i < 3; i++) {
switch (i) {
case 0:
isPermissionGiven(Manifest.permission.ACCESS_COARSE_LOCATION, PERMISSION_LOCATION_COARSE);
break;
case 1:
isPermissionGiven(Manifest.permission.ACCESS_FINE_LOCATION, PERMISSION_LOCATION_FINE);
break;
case 2:
isPermissionGiven(Manifest.permission.READ_PHONE_STATE, PERMISSION_READ_PHONE_STATE);
break;
}
}
}
private boolean isPermissionGiven(String permissionName, int requestCode) {
LoggerUtility.e(TAG, "isPermissionGiven :-" + permissionName);
if (ContextCompat.checkSelfPermission(LoginActivity.this,
permissionName)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(YourActivity.this,
new String[]{permissionName},
requestCode);
return false;
}
return true;
}
而且覆盖在你的活动onRequestPermissionsResult方法:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
LoggerUtility.e(TAG, "onRequestPermissionsResult :-" + requestCode);
switch (requestCode) {
case PERMISSION_LOCATION_FINE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
isPermissionGiven(Manifest.permission.READ_PHONE_STATE, PERMISSION_READ_PHONE_STATE);
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
break;
case PERMISSION_LOCATION_COARSE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
isPermissionGiven(Manifest.permission.READ_PHONE_STATE, PERMISSION_READ_PHONE_STATE);
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
break;
case PERMISSION_READ_PHONE_STATE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
break;
}
}
你有'' ''在你的清单文件中? – Grisgram
是的,我有这个权限。 – Narendra
给我们您的清单 –