0

我正在开发应用程序更衣室应用程序。如果在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(); 
} 
} 

你能帮我吗。

+0

你有''<使用许可权的android: name =“android.permission.BOOT_COMPLETED”/> ''在你的清单文件中? – Grisgram

+0

是的,我有这个权限。 – Narendra

+0

给我们您的清单 –

回答

0

检查设备是否棉花糖和授予权限

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.MARSHMALLOW) { 
    // only for marshmallow and newer versions 
} 
+0

不工作...重新启动设备获取锁定的应用程序长度后。如果我们只是进入应用程序(应用程序锁定应用程序),并退出应用程序的工作完美这次它要求密码。 – Narendra

0

以下的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; 
     } 
    } 
+1

在这个应用程序中,我只有和重新启动设备后锁定了应用程序的长度。如果我们只是进入应用程序(应用程序锁定应用程序),并退出应用程序的工作完美这次它要求密码。 – Narendra

+0

“重新启动设备获取锁定的应用程序长度后” - 没有得到这一行。帮助我简要介绍一下。 –

+0

我们锁定了应用程序,重新启动设备后即将到来。 Log.d( “AMK”, “AppLockerPreference1 --->” + mApplicationList.length); – Narendra

相关问题