BroadcastReceiver开机启动和动态注册

来源:互联网 发布:网络电话卡app制作 编辑:程序博客网 时间:2024/06/07 11:08

1.Recerver的开机自动启动

主要是通过静态注册的方式来完成app的开机自动启动的.
创建一个MyReceiver

public class MyReceiver extends BroadcastReceiver{    @Override    public void onReceive(Context context, Intent intent) {        //定义需要开机启动的activity        Intent mIntent = new Intent(context , MainActivity.class);        //如果当前activity存在了,再次运行我们的应用程序,重新创建activity        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        //通过context启动activity        context.startActivity(mIntent);    }}

**在Mainactivity里面的定义自己随便
重点是在AndroidManifest.xml文件里面的静态注册**

 <receiver  android:name=".MyReceiver">            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED"/>                <category android:name="android.intent.category.HOME"/>            </intent-filter>        </receiver>    </application>    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

里面的android.intent.action.BOOT_COMPLETED就好像是说”我已经开机啦”,然后我们才可以接收广播,实现app的操作.

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

这个是用户权限设置

2.动态注册(电池电量的显示)

**优点:自己可以控制什么时候调用广播
动态注册代码:**

 protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTextView = (TextView) findViewById(R.id.power_tx);        //动态注册        registerReceiver(receiver ,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));    }

取消注册代码:

 protected void onDestroy() {        super.onDestroy();        //取消注册        unregisterReceiver(receiver);    }

建立receiver对象获取当前电量显示

 private  BroadcastReceiver receiver = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {                //系统电量属性level,scale                int level = intent.getIntExtra("level", 0);                int scale = intent.getIntExtra("scale", 100);                //打印出当前电量                mTextView.setText("当前电量为: " + (level * 100) / scale + "%");            }        }    };

电量显示测试代码

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    private TextView mTextView;    private  BroadcastReceiver receiver = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {                int level = intent.getIntExtra("level", 0);                int scale = intent.getIntExtra("scale", 100);                mTextView.setText("当前电量为: " + (level * 100) / scale + "%");            }        }    };    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTextView = (TextView) findViewById(R.id.power_tx);        //动态注册        registerReceiver(receiver ,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));    }    @Override    protected void onDestroy() {        super.onDestroy();        //取消注册        unregisterReceiver(receiver);    }}
原创粉丝点击