Android ACTION_BOOT_COMPLETED每次调用?

时间:2014-08-25 16:11:59

标签: android device boot

我正在尝试在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();
      }
  } 
}

我已经明确许可。

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

我想仅在启动或设备启动期间执行此条件,但每当我打开应用程序时,此条件都会满足。

请告诉我如何仅在设备启动或启动期间运行该条件。

请帮帮我。

2 个答案:

答案 0 :(得分:4)

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>

...

BootReceiver.java:

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

答案 1 :(得分:0)

Intent有一个名为ACTION_BOOT_COMPLETED的字符串,它不是null(它有一个值)。那是你要检查的。你的意思是在BroadcastReceiver中完全不同。