запускать активность каждый раз, когда устройство разблокировано на Android Oreo - PullRequest
0 голосов
/ 16 сентября 2018

В настоящее время я работаю над приложением для запуска действия каждый раз, когда устройство разблокировано, следующий код хорошо работает для небольших устройств с Android api oreo.

Манифест:

<receiver
        android:name=".ScreenReceiver"
        android:enabled="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.SCREEN_OFF" />
            <action android:name="android.intent.action.SCREEN_ON" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <category android:name="android.intent.category.DEFAULT" >
            </category>
        </intent-filter>
    </receiver>

У меня также есть в манифесте

 <uses-permission android: name ="android.permission.RECEIVE_BOOT_COMPLETED" />

Класс ScreenReceiver:

public class ScreenReceiver extends BroadcastReceiver {
ScreenReceiver screen;
Context context=null;
@Override
public void onReceive(Context context, Intent intent)
{
    this.context=context;
    if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)||intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)||intent.getAction().equals(Intent.ACTION_USER_PRESENT))
    {
        Intent i = new Intent(context, DictionaryView.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }
}

}

Мне нужно запускать действие каждый раз, когда телефон разблокирует предыдущийкод работает довольно хорошо для более ранних версий Android Oreo, но эта версия не работает, потому что он никогда не запускает активность после разблокировки устройства.Друзья, пожалуйста, мне нужна помощь, поиск полезной информации занимает пару часов, но безуспешно.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Попробуйте это:

Ваш код выглядит следующим образом:

<receiver android:name=".ScreenReceiver"
    android:enabled="true" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.SCREEN_OFF" />
        <action android:name="android.intent.action.SCREEN_ON" />
        <action android:name="android.intent.action.USER_PRESENT" />
        <category android:name="android.intent.category.DEFAULT" >
        </category>
    </intent-filter>

Пожалуйста, удалите все теги в коде фильтра намерений, как это выглядит

<receiver android:name=".ScreenReceiver>
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>

Класс ScreenReceiver:

public class ScreenReceiver extends BroadcastReceiver {
ScreenReceiver screen;
Context context=null;
   @Override
    public void onReceive(Context context, Intent intent) {
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Intent i = new Intent(context, DictionaryView.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }
}
}

попробуй, надеюсь, тебе это поможет.

0 голосов
/ 16 сентября 2018

Возможно, вам потребуется запросить разрешение у пользователя

if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.RECEIVE_BOOT_COMPLETED)  != PackageManager.PERMISSION_GRANTED
            )
    {
        //REQUEST RUNTIME PERMISSION
        ActivityCompat.requestPermissions(this, new String[] {
                android.Manifest.permission.RECEIVE_BOOT_COMPLETED,                    
        }  ,    MY_PERMISSION_REQUEST_CODE);
    }

Затем вам нужно будет настроить метод переопределения для обработки запроса requestpermissionresult

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode)
    {
        case MY_PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
               //do this
            }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...