重新启动设备后,我的更衣室应用程序无法在Android marshmallow设备上运行

时间:2017-04-03 07:30:49

标签: android android-service sharedpreferences android-6.0-marshmallow android-broadcastreceiver

我正在开发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();
}
}

你能帮帮我吗。

2 个答案:

答案 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;
        }
    }