每次在android oreo上解锁设备时都会启动活动

时间:2018-09-16 19:41:08

标签: java android android-studio

我目前正在开发一个应用程序,以在每次解锁设备时启动一项活动,以下代码适用于装有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 :(得分:0)

您可能需要征求用户的许可

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
            }
    }
}

答案 1 :(得分:0)

尝试一下:

您的代码如下:

<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);
    }
}
}

尝试这个,希望对您有帮助。