Android的ACTION_SHUTDOWN广播无法正常工作 [英] Android ACTION_SHUTDOWN Broadcast not working

查看:4601
本文介绍了Android的ACTION_SHUTDOWN广播无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

code -

 公共类ShutdownReceiver扩展的BroadcastReceiver {
    私有静态最后字符串变量=ShutdownReceiver;

    @覆盖
    公共无效的onReceive(最终上下文的背景下,最终的意图意图){
        Logger.i(TAG,关闭........................);
        如果(android.intent.action.ACTION_SHUTDOWN.equals(intent.getAction())){
            //没电了
        }
    }
}
 

服务 -

 私人的BroadcastReceiver mReceiver = NULL;

    @覆盖
    公共无效的onCreate(){
         super.onCreate();
         //初始化接收器
         //它被用于注册广播关机或关机
         IntentFilter的过滤器=新的IntentFilter(Intent.ACTION_SHUTDOWN);
         mReceiver =新ShutdownReceiver();
         registerReceiver(mReceiver,过滤器);
   }

   @覆盖
   公共无效的onDestroy(){
       unregisterReceiver(mReceiver);
   }
 

权限 -

 <使用-权限的Andr​​oid:名称=android.permission.WRITE_EXTERNAL_STORAG​​E/>
<使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_WIFI_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.CHANGE_WIFI_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_NETWORK_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.CALL_PHONE/>
<使用-权限的Andr​​oid:名称=android.permission.READ_PHONE_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.CALL_PRIVILEGED/>
<使用-权限的Andr​​oid:名称=android.permission.CHANGE_CONFIGURATION/>
<使用-权限的Andr​​oid:名称=android.permission.GET_TASKS/>
<使用-权限的Andr​​oid:名称=android.permission.RECEIVE_BOOT_COMPLETED/>
<使用-权限的Andr​​oid:名称=android.permission.DEVICE_POWER/>
 

解决方案

一个。添加允许您的清单里面

 <使用-权限的Andr​​oid:名称=android.permission.DEVICE_POWER/>
 


乙。您可以使用

  

ACTION_SHUTDOWN

     

意图是广播当手机即将停机。该文件说:

应用程序将无法正常需要处理这个问题,因为前台活动将被暂停为好。

在换句话说,如果你所有的生命周期事件的活动做出适当的反应,没有必要使用这个,除非你真的想要做一些具体的事情涉及到关机。

该ACTION_SHUTDOWN意图是在API级别4中引入的,换句话说,它会只能在运行Android 1.6或更高版本的手机发送的。

您会套住广播用一个BroadcastReceiver。它看起来是这样的:

 公共类ShutdownReceiver扩展的BroadcastReceiver {

 @覆盖
 公共无效的onReceive(上下文的背景下,意图意图){
    //将code在这里
   }

 }
 

您还需要在你的清单如下所示的条目:

 <接收机器人:名称=。ShutdownReceiver>
<意向滤光器>
<作用机器人:名称=android.intent.action.ACTION_SHUTDOWN/>
&所述; /意图滤光器>
< /接收器>
 

根据你在做什么,另一种选择是使用

  

ACTION_BOOT_COMPLETED

当手机重新启动意图被发送。


具体到某些手机(HTC)

除了

  

ACTION_SHUTDOWN,您应该添加

     

android.intent.action.QUICKBOOT_POWEROFF

     

要你的意图过滤器。

     

ACTION_SHUTDOWN

并不总是播放一些HTC设备(如EVO 4G)。 具体而言,如果选择重新启动,ACTION_SHUTDOWN是广播,但如果你选择关机,

  

QUICKBOOT_POWEROFF

     

广播代替。


我很抱歉重定向不必要的。

  

但是我渐渐发现了保护的目的|系统正意图可以实现用java code只::

下面是code相一致好评::

 公共类为ExampleActivity延伸活动{
  @覆盖

  保护无效的onCreate(){

    //初始化接收器
    IntentFilter的过滤器=新的IntentFilter(Intent.ACTION_SHUTDOWN);
    BroadcastReceiver的mReceiver =新ShutDownReceiver();
    registerReceiver(mReceiver,过滤器);
    //你的code
      }
   }


   公共类ShutDownReceiver扩展的BroadcastReceiver {
   @覆盖
   公共无效的onReceive(上下文的背景下,意图意图)
     {
        如果(intent.getAction()。等于(Intent.ACTION_SHUTDOWN))
           {
          //做任何你需要做的
           }
      }
    }
 

Code -

public class ShutdownReceiver extends BroadcastReceiver {
    private static final String TAG = "ShutdownReceiver";

    @Override
    public void onReceive(final Context context, final Intent intent) {
        Logger.i(TAG, "Shutting Down..........................");
        if("android.intent.action.ACTION_SHUTDOWN".equals(intent.getAction())) {
            //Power Off
        }
    }
}

Service -

private BroadcastReceiver mReceiver = null;

    @Override
    public void onCreate() {
         super.onCreate();
         // INITIALIZE RECEIVER
         //It is used to register broadcast for ShutDown or Power Off
         IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN);
         mReceiver = new ShutdownReceiver();
         registerReceiver(mReceiver, filter);
   }

   @Override
   public void onDestroy() {
       unregisterReceiver(mReceiver);
   }

Permissions -

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.DEVICE_POWER" />

解决方案

A. Add the permission inside your manifest

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


B. You can use the

ACTION_SHUTDOWN

Intent which is broadcast when the phone is about to shutdown. The documentation says:

Apps will not normally need to handle this, since the foreground activity will be paused as well.

In other words, if you respond to all the lifecycle events for your Activity appropriately, there's no need to use this unless you really want to do something specific related to shutdown.

The ACTION_SHUTDOWN Intent was introduced in API Level 4, in other words it'll only be sent on phones running Android 1.6 or later.

You'll trap the Broadcast with a BroadcastReceiver. It will look something like this:

 public class ShutdownReceiver extends BroadcastReceiver {

 @Override
 public void onReceive(Context context, Intent intent) {
    //Insert code here
   }

 }

You'll also need an entry in your Manifest like the following:

 <receiver android:name=".ShutdownReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>

Depending on what you're doing, another option would be to use the

ACTION_BOOT_COMPLETED

Intent which is sent when the phone is restarted.


Specific to some phones(htc)

In addition to

ACTION_SHUTDOWN, you should add

android.intent.action.QUICKBOOT_POWEROFF

to your intent-filter.

ACTION_SHUTDOWN

isn't always broadcast on some HTC devices (e.g. the Evo 4g). To be more specific, if you choose Restart, ACTION_SHUTDOWN is broadcast, but if you choose Power Off,

QUICKBOOT_POWEROFF

is broadcast instead.


I'm so sorry for redirecting unnecessary.

But I gradually found out that protected intent | sytem intent can be implement using java code only::

Here is the code looks alike::

  public class ExampleActivity extends Activity {
  @Override

  protected void onCreate() {

    // INITIALIZE RECEIVER
    IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN);
    BroadcastReceiver mReceiver = new ShutDownReceiver();
    registerReceiver(mReceiver, filter);
    // YOUR CODE
      }
   }


   public class ShutDownReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) 
     {
        if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) 
           {
          // DO WHATEVER YOU NEED TO DO HERE
           }             
      }
    }

这篇关于Android的ACTION_SHUTDOWN广播无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆