android: как я могу запустить свое приложение, если экран заблокирован [дубликат]

Вы можете использовать эту пользовательскую библиотеку (написанную с помощью Promise) для выполнения удаленного вызова.

function $http(apiConfig) {
    return new Promise(function (resolve, reject) {
        var client = new XMLHttpRequest();
        client.open(apiConfig.method, apiConfig.url);
        client.send();
        client.onload = function () {
            if (this.status >= 200 && this.status < 300) {
                // Performs the function "resolve" when this.status is equal to 2xx.
                // Your logic here.
                resolve(this.response);
            }
            else {
                // Performs the function "reject" when this.status is different than 2xx.
                reject(this.statusText);
            }
        };
        client.onerror = function () {
            reject(this.statusText);
        };
    });
}

Пример простого использования:

$http({
    method: 'get',
    url: 'google.com'
}).then(function(response) {
    console.log(response);
}, function(error) {
    console.log(error)
});
64
задан Steve Blackwell 9 July 2015 в 13:09
поделиться

4 ответа

109
ответ дан Enes 25 August 2018 в 05:25
поделиться

Здесь вы можете использовать код в любом из ответов, который, по вашему мнению, работает. Затем, чтобы не работать HOME , измените TYPE_SYSTEM_ALERT или TYPE_SYSTEM_OVERLAY (в зависимости от того, что вы используете в данный момент) на TYPE_SYSTEM_ERROR:

params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
    WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
    PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP;
mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(mOverlay, params);
0
ответ дан JJD 25 August 2018 в 05:25
поделиться

Не переходите на активность, потому что андроид не отображает экран блокировки за вашей деятельностью по соображениям безопасности, поэтому используйте службу вместо Activity.

Ниже мой код в onStartCommand моей службы.

WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

View mView = mInflater.inflate(R.layout.score, null);

WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);

mWindowManager.addView(mView, mLayoutParams);

И добавьте <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> в манифест

27
ответ дан S H 25 August 2018 в 05:25
поделиться
19
ответ дан SarwarCSE 25 August 2018 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: