我正在开发App locker应用程序。如果安装了这个 应用于kitkat版本设备应用程序锁定及其应用 工作完美。最初在棉花糖|(6.0)版本设备中 应用程序正在工作,如果我们重新启动设备应用程序锁定不是 工作,锁定的应用程序打开,不要求任何密码。 如果我们只是输入应用程序(应用程序锁定应用程序)并退出应用程序 工作完美。那个时候它要求密码。
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();
}
}
你能帮帮我吗。
答案 0 :(得分:0)
检查设备是否是棉花糖并给予权限
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.MARSHMALLOW) {
// only for marshmallow and newer versions
}
答案 1 :(得分:0)
在Android 6.0(MARSHMALLOW)下,它只需要提及清单文件中的所有权限,而在marshmallow及以上版本中,所有权限都由用户授予,因为您需要显示popUp以获取权限。 就像你想使用以下权限一样,然后进行如下编码:
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;
}
}