启动接收器在 Android 10 上不起作用
Startup receiver doesn't work on Android 10
我的启动接收器在 Android10 上不工作。为什么?
解决方案奖励 50 分。
AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<receiver android:name="ServiceStarter"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<acenter code heretion android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_BOOT_COMPLETED" />
<action android:name="android.intent.action.REBOOT" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>
ServiceStarter.Java
public class ServiceStarter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences mSharedPref = context.getSharedPreferences("general", MODE_PRIVATE);
mSharedPref.edit().putInt("Boot", 1).apply();
}
}
MainActivity.java
int boot = mSharedPref.getInt("Boot", 0);
Toast.makeText(this, "Boot: " + String.valueOf(boot), Toast.LENGTH_LONG).show();
当我打开我的应用程序时,“启动”始终为 0。不会调用 onReceive()。
我终于找到了解决办法。由于 Android 24 您需要向接收器添加 directBootAware 属性以接收 BOOT_COMPLETED 意图,以防 phone 被 PIN 锁定,图案等
android:directBootAware="true"
而 onReceive 将是
@Override
public void onReceive(Context context, Intent intent) {
//Toast.makeText(context, "onReceive Boot", Toast.LENGTH_LONG).show();
SharedPreferences mSharedPref = context.getSharedPreferences("general", MODE_PRIVATE);
if(intent != null && intent.getAction() != null){
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()) ||
Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(intent.getAction())) {
}
}
}
我的启动接收器在 Android10 上不工作。为什么?
解决方案奖励 50 分。
AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<receiver android:name="ServiceStarter"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<acenter code heretion android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_BOOT_COMPLETED" />
<action android:name="android.intent.action.REBOOT" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>
ServiceStarter.Java
public class ServiceStarter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences mSharedPref = context.getSharedPreferences("general", MODE_PRIVATE);
mSharedPref.edit().putInt("Boot", 1).apply();
}
}
MainActivity.java
int boot = mSharedPref.getInt("Boot", 0);
Toast.makeText(this, "Boot: " + String.valueOf(boot), Toast.LENGTH_LONG).show();
当我打开我的应用程序时,“启动”始终为 0。不会调用 onReceive()。
我终于找到了解决办法。由于 Android 24 您需要向接收器添加 directBootAware 属性以接收 BOOT_COMPLETED 意图,以防 phone 被 PIN 锁定,图案等
android:directBootAware="true"
而 onReceive 将是
@Override
public void onReceive(Context context, Intent intent) {
//Toast.makeText(context, "onReceive Boot", Toast.LENGTH_LONG).show();
SharedPreferences mSharedPref = context.getSharedPreferences("general", MODE_PRIVATE);
if(intent != null && intent.getAction() != null){
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()) ||
Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(intent.getAction())) {
}
}
}