每次都调用Android ACTION_BOOT_COMPLETED吗?

1 boot android device

我正在尝试在Android中编写代码,以在引导过程中创建条件,但我的条件每次都满足(在引导以及设备运行期间)。我正在尝试做的是,仅在引导期间执行条件。

我的代码:

MainActivity.java

package com.example.bootingtest;

import android.os.Bundle;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      if (Intent.ACTION_BOOT_COMPLETED!=null) {
          Toast.makeText(getApplicationContext(), "Device is booting ...", Toast.LENGTH_LONG).show();
      }
  } 
}
Run Code Online (Sandbox Code Playgroud)

我已明确允许。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Run Code Online (Sandbox Code Playgroud)

我只想在启动或设备启动期间执行此条件,但是每次打开应用程序时,此条件都可以满足。

请向我建议如何仅在设备启动或启动期间运行条件。

请帮帮我。

Poz*_*pps 5

Intent.ACTION_BOOT_COMPLETED是一个常数,所以它的价值从未改变,这就是为什么你总是如此,你活动开始时。

您需要做的是在清单上声明一个BroadcastReceiver并实现它,而不是在声明上添加一个IntentFilter来接收广播。像这样:

AndroidManifest.xml:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
....
<receiver 
    android:name=".BootReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

...

BootReceiver.java:

public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //Do what you need to execute on boot here.
    }
}
Run Code Online (Sandbox Code Playgroud)