我目前正在开发一个应用程序,以在每次解锁设备时启动一项活动,以下代码适用于装有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来说效果很好,但是此版本无法正常工作,因为它永远不会在解锁设备后启动活动。 朋友们,我需要帮助,需要花费几个小时才能找到有用的信息,但没有成功。
答案 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);
}
}
}
尝试这个,希望对您有帮助。