Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
КВА696
37 / 37 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 2
#1

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

02.11.2016, 08:42. Просмотров 685. Ответов 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
http://www.cyberforum.ru/android-dev/thread1387091.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2016, 08:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получить состояние экрана (активно/заблокировано) (Программирование Android):

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

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

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

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

Получить состояние левой кнопки мыши
Здравствуйте!) Подскажите пожалуйста как получить состояние левой кнопки...

15
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
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 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 2
02.11.2016, 13:16  [ТС] #3
shavuz, А не подскажите как с этим работать. вместо Log.i(TAG,"Screen went ON"); делать статическую переменную и из другова клася у неё спрашивать труе или фальше она или же это не события и я узнаю о состоянии когда спрошу тем самым обращаться к классу MyBroadCastReciever

Я прока что просто не до понял принцип работы extends BroadcastReceiver
Тес самым телефон сам оповестит приложение когда он меняет состояние или всеже программа должна сама узновать у телефона в каком же он сейчас состоянии.
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
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 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 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 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 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
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
02.11.2016, 18:32 #7
забыл, в манифесте добавьте :
XML
1
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
1
КВА696
37 / 37 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 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
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
02.11.2016, 19:25 #9
Лучший ответ Сообщение было отмечено КВА696 как решение

Решение

вот рабочий код, проверил у себя на телефоне, на эмуляторе не знаю будет ли работать:
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
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
02.11.2016, 19:30 #10
finish() в конце onCreate только я вижу?
1
КВА696
37 / 37 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 2
02.11.2016, 19:31  [ТС] #11
Паблито, А не должно быть?
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
02.11.2016, 19:35 #12
ну получается - зарегистрировали ресивер и приложение завершилось, все

что бы он работал постоянно - его надо по идее регистрировать в сервисе
1
КВА696
37 / 37 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 2
02.11.2016, 19:38  [ТС] #13
Паблито,
Спасибо да беда в финише
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
02.11.2016, 19:41 #14
я уверен -беда не только в финише
жду сообщения "а почему мой ресивер перестает срабатывать когда я смахиваю приложение из Recent Apps?"
0
КВА696
37 / 37 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 2
02.11.2016, 19:42  [ТС] #15
Цитата Сообщение от Паблито Посмотреть сообщение
"а почему мой ресивер перестает срабатывать когда я смахиваю приложение из Recent Apps?"
не понял вопроса
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
02.11.2016, 20:04 #16
потому что активити умрет. нужен сервис.
0
02.11.2016, 20:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2016, 20:04
Привет! Вот еще темы с решениями:

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

Как получить текущее состояние Visible у JPanel?
В апплете есть панелька (Jpanel), которая скрывается и появляется. Две кнопки...

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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