Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
#1

Получить состояние экрана (активно/заблокировано) - Программирование Android

02.11.2016, 08:42. Просмотров 400. Ответов 15
Метки нет (Все метки)

Как получить в каком состоянии телефон в активном или экран заблокирован или телефон лежит бездействует(но при этом у телефона блокировки экрана не не поставлена, не запоролен).

Нашел только как заблокировать экран
Java
1
2
3
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
lock.disableKeyguard();
Но пока что не знаю чем мне это поможет, ещё встречается что то про
android.intent.action.ACTION_SCREEN_ON
android.intent.action.ACTION_SCREEN_OFF
Но как это работает я так и не понял

Добавлено через 49 минут
По моему кое как нашел http://stackoverflow.com/questions/7...ff-not-working
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2016, 08:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получить состояние экрана (активно/заблокировано) (Программирование Android):

Как сохранить состояние хронометра при повороте экрана? - Программирование Android
в программе запускается хронометр Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer); chronometer.start(); ...

Почему после завершения работы приложение активно? - Программирование Android
Установил программу на телефон. Протестил, делаю выход:finish(); System.exit(0); Открываю настройки->приложения->(моя программа) ...

Галочка активно/не активно, управляющая активностью поля - Delphi
Здравствуйте, нужна помощь, если кто может помогите, есть форма регистрации. Вопрос вот в чем с боку есть 2 отделения( Наименования...

Как получить сигнал с клавиатуры, если активно другое приложение - C++
Всем привет. Хочу реализовать вызов приложения, которое в данный момент не является активным. Т.е. к примеру, пользователь задал клавишу...

Получить состояние сокета - C++
Как получить состояние сокета? Надо узнавать что сервер закрыл соединение. TCP\IP

Получить состояние левой кнопки мыши - C#
Здравствуйте!) Подскажите пожалуйста как получить состояние левой кнопки мышки в любой момент времени из точки кода. Например есть...

15
shavuz
110 / 116 / 22
Регистрация: 29.01.2014
Сообщений: 575
02.11.2016, 11:57 #2
вам нужно сделать бродкастресивер который будет ловить скрин он/оф
вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
public class MyBroadCastReciever extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            Log.i(TAG,"Screen went OFF");
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.i(TAG,"Screen went ON");
        }
    }
}
XML
1
2
3
4
5
6
<receiver android:name=".MyBroadCastReciever">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_OFF"/>
        <action android:name="android.intent.action.SCREEN_ON"/>
    </intent-filter>
</receiver>
1
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
02.11.2016, 13:16  [ТС] #3
shavuz, А не подскажите как с этим работать. вместо Log.i(TAG,"Screen went ON"); делать статическую переменную и из другова клася у неё спрашивать труе или фальше она или же это не события и я узнаю о состоянии когда спрошу тем самым обращаться к классу MyBroadCastReciever

Я прока что просто не до понял принцип работы extends BroadcastReceiver
Тес самым телефон сам оповестит приложение когда он меняет состояние или всеже программа должна сама узновать у телефона в каком же он сейчас состоянии.
0
shavuz
110 / 116 / 22
Регистрация: 29.01.2014
Сообщений: 575
02.11.2016, 14:09 #4
в этом примере я показал как делать ресивер в отдельном классе. в принципе вы можете сделать его в классе таким образом:
Java
1
2
3
4
5
6
7
8
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            
        }
    };
Но тогда нужно запустить его в онкриейт:
Java
1
2
3
4
IntentFilter filter = new IntentFilter();
  filter.addAction("android.intent.action.SCREEN_OFF");
  filter.addAction("android.intent.action.SCREEN_ON");
     registerReceiver(mBroadcastRecever, filter);
и уничтожить его в ондестрой:
Java
1
2
  unregisterReceiver(mBroadcastReceiver);
   mBroadcastReceiver= null;
это все вы можете сделать в активити, создать глобальную булеан переменную в активити и когда происходит сообщение об изменении состояния экрана ресивер будет получать их и изменять переменную
1
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
02.11.2016, 18:22  [ТС] #5
shavuz, Вроди бы сделал все как вы написали но ни какой реакции
Или эмулятор не умеет работать с SCREEN_OFF и SCREEN_ON


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.example.avastscan.avastscan;
 
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.SCREEN_OFF");
        filter.addAction("android.intent.action.SCREEN_ON");
        registerReceiver(mybroadcast, filter);
 
        finish();
    }
 
    @Override
    protected void onDestroy(){
        unregisterReceiver(mybroadcast);
        mybroadcast= null;
        super.onDestroy();
    }
 
 
    //Create broadcast object
    BroadcastReceiver mybroadcast = new BroadcastReceiver() {
        //When Event is published, onReceive method is called
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            System.out.println("MyReceiver");
 
            if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                System.out.println("Screen ON");
            }
            else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                System.out.println("Screen went OFF");
            }
 
        }
    };
}
Получить состояние экрана (активно/заблокировано)
0
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
02.11.2016, 18:24  [ТС] #6
В итоге сколько не нажимаю на верхнюю кнопку включить выключить но в Run ни чего не появляется типо

System.out.println("MyReceiver");
или
System.out.println("Screen ON");
или
System.out.println("Screen went OFF");
0
shavuz
110 / 116 / 22
Регистрация: 29.01.2014
Сообщений: 575
02.11.2016, 18:32 #7
забыл, в манифесте добавьте :
XML
1
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
1
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
02.11.2016, 18:40  [ТС] #8
shavuz, Все равно тишина

$ adb shell am start -n "com.example.avastscan.avastscan/com.example.avastscan.avastscan.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Client not ready yet..Waiting for process to come online
Waiting for process to come online
Connected to process 3295 on device sas [emulator-5554]
I/InstantRun: Instant Run Runtime started. Android package is com.example.avastscan.avastscan, real application class is null.
E/InstantRun: Could not find slices in APK; aborting.
W/InstantRun: No instant run dex files added to classpath
D/dalvikvm: GC_FOR_ALLOC freed 391K, 14% free 2810K/3256K, paused 3ms, total 3ms
D/dalvikvm: GC_FOR_ALLOC freed 416K, 16% free 2833K/3372K, paused 2ms, total 3ms

Или я все таки должен из другова кода где хочу получить состояние надо найти как залезть в onReceive

Добавлено через 1 минуту
shavuz, у вас не будет готового проекта?
0
shavuz
110 / 116 / 22
Регистрация: 29.01.2014
Сообщений: 575
02.11.2016, 19:25 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
вот рабочий код, проверил у себя на телефоне, на эмуляторе не знаю будет ли работать:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class MainActivity extends AppCompatActivity
{
    private static final String LOG_TAG = MainActivity.class.getSimpleName();
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_SCREEN_ON);
        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(mBroadcastReceiver, intentFilter);
 
 
    }
 
    BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
 
            if(Intent.ACTION_SCREEN_OFF.equals(intent.getAction()))
            {
                Log.i(LOG_TAG, "screen is OFF");
            }
            else if(Intent.ACTION_SCREEN_ON.equals(intent.getAction()))
            {
                Log.i(LOG_TAG, "screen is ON");
 
            }
        }
    };
 
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        unregisterReceiver(mBroadcastReceiver);
    }
}
в манифесте:
XML
1
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
1
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,864
Завершенные тесты: 1
02.11.2016, 19:30 #10
finish() в конце onCreate только я вижу?
1
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
02.11.2016, 19:31  [ТС] #11
Паблито, А не должно быть?
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,864
Завершенные тесты: 1
02.11.2016, 19:35 #12
ну получается - зарегистрировали ресивер и приложение завершилось, все

что бы он работал постоянно - его надо по идее регистрировать в сервисе
1
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
02.11.2016, 19:38  [ТС] #13
Паблито,
Спасибо да беда в финише
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,864
Завершенные тесты: 1
02.11.2016, 19:41 #14
я уверен -беда не только в финише
жду сообщения "а почему мой ресивер перестает срабатывать когда я смахиваю приложение из Recent Apps?"
0
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 632
Завершенные тесты: 2
02.11.2016, 19:42  [ТС] #15
Цитата Сообщение от Паблито Посмотреть сообщение
"а почему мой ресивер перестает срабатывать когда я смахиваю приложение из Recent Apps?"
не понял вопроса
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2016, 19:42
Привет! Вот еще темы с ответами:

Как получить текущее состояние Visible у JPanel? - Java
В апплете есть панелька (Jpanel), которая скрывается и появляется. Две кнопки на скрытие и показ делать не хочу (много места займут :)) )....

Как получить состояние (release/debug) проекта? - C++
Возможно ли получить состояние (release/debug) проекта препроцессором?

Датчик вскрытия корпуса, получить его состояние - Корпуса
Доброго дня уважаемые форумчане) Вопрос к вам такой. На корпусе имеется датчик вскрытия, системник acer s4610g, есть ли возможность...

Программно получить состояние оперативной памяти текущего компьютера? - 1С
всем привет, как программно получить состояние оперативной памяти текущего компьютера?(сервера, локального).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
02.11.2016, 19:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru