我的编程空间,编程开发者的网络收藏夹
学习永远不晚

android之BroadcastReceiver应用详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

android之BroadcastReceiver应用详解

今天我们来讲一下Android中BroadcastReceiver的相关知识。

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。

Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。

首先,我们来演示一下创建一个BroadcastReceiver,并让这个BroadcastReceiver能够根据我们的需要来运行。

要创建自己的BroadcastReceiver对象,我们需要继承android.content.BroadcastReceiver,并实现其onReceive方法。下面我们就创建一个名为MyReceiver广播接收者:


package com.scott.receiver; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
public class MyReceiver extends BroadcastReceiver { 
  private static final String TAG = "MyReceiver"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, msg); 
  } 
} 

在onReceive方法内,我们可以获取随广播而来的Intent中的数据,这非常重要,就像无线电一样,包含很多有用的信息。

在创建完我们的BroadcastReceiver之后,还不能够使它进入工作状态,我们需要为它注册一个指定的广播地址。没有注册广播地址的BroadcastReceiver就像一个缺少选台按钮的收音机,虽然功能俱备,但也无法收到电台的信号。下面我们就来介绍一下如何为BroadcastReceiver注册广播地址。

静态注册

静态注册是在AndroidManifest.xml文件中配置的,我们就来为MyReceiver注册一个广播地址:


<receiver android:name=".MyReceiver"> 
      <intent-filter> 
        <action android:name="android.intent.action.MY_BROADCAST"/> 
        <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
    </receiver> 

配置了以上信息之后,只要是android.intent.action.MY_BROADCAST这个地址的广播,MyReceiver都能够接收的到。注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。

动态注册

动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播,下面我们就来看一下注册的

代码:


MyReceiver receiver = new MyReceiver(); 
IntentFilter filter = new IntentFilter(); 
filter.addAction("android.intent.action.MY_BROADCAST"); 
registerReceiver(receiver, filter); 

注意,registerReceiver是android.content.ContextWrapper类中的方法,Activity和Service都继承了ContextWrapper,所以可以直接调用。在实际应用中,我们在Activity或Service中注册了一个BroadcastReceiver,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。所以,记得在特定的地方执行解除注册操作:


@Override 
protected void onDestroy() { 
  super.onDestroy(); 
  unregisterReceiver(receiver); 
} 

执行这样行代码就可以解决问题了。注意,这种注册方式与静态注册相反,不是常驻型的,也就是说广播会跟随程序的生命周期。

我们可以根据以上任意一种方法完成注册,当注册完成之后,这个接收者就可以正常工作了。我们可以用以下方式向其发送一条广播:


public void send(View view) { 
  Intent intent = new Intent("android.intent.action.MY_BROADCAST"); 
  intent.putExtra("msg", "hello receiver."); 
  sendBroadcast(intent); 
}

 注意,sendBroadcast也是android.content.ContextWrapper类中的方法,它可以将一个指定地址和参数信息的Intent对象以广播的形式发送出去。

点击发送按钮,执行send方法,控制台打印如下:

看到这样的打印信息,表明我们的广播已经发出去了,并且被MyReceiver准确无误的接收到了。

上面的例子只是一个接收者来接收广播,如果有多个接收者都注册了相同的广播地址,又会是什么情况呢,能同时接收到同一条广播吗,相互之间会不会有干扰呢?这就涉及到普通广播和有序广播的概念了。

普通广播(Normal Broadcast)

普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。

为了验证以上论断,我们新建三个BroadcastReceiver,演示一下这个过程,FirstReceiver、SecondReceiver和ThirdReceiver的代码如下:


package com.scott.receiver; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
public class FirstReceiver extends BroadcastReceiver { 
  private static final String TAG = "NormalBroadcast"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, "FirstReceiver: " + msg); 
  } 
} 
public class SecondReceiver extends BroadcastReceiver { 
  private static final String TAG = "NormalBroadcast"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, "SecondReceiver: " + msg); 
  } 
} 
public class ThirdReceiver extends BroadcastReceiver { 
  private static final String TAG = "NormalBroadcast"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, "ThirdReceiver: " + msg); 
  } 
} 

然后再次点击发送按钮,发送一条广播,控制台打印如下:

看来这三个接收者都接收到这条广播了,我们稍微修改一下三个接收者,在onReceive方法的最后一行添加以下代码,试图终止广播:


abortBroadcast(); 

再次点击发送按钮,我们会发现,控制台中三个接收者仍然都打印了自己的日志,表明接收者并不能终止广播。

有序广播(Ordered Broadcast)

有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。

为了演示有序广播的流程,我们修改一下上面三个接收者的代码,如下:


package com.scott.receiver; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
public class FirstReceiver extends BroadcastReceiver { 
  private static final String TAG = "OrderedBroadcast"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, "FirstReceiver: " + msg); 
    Bundle bundle = new Bundle(); 
    bundle.putString("msg", msg + "@FirstReceiver"); 
    setResultExtras(bundle); 
  } 
} 

public class SecondReceiver extends BroadcastReceiver { 
  private static final String TAG = "OrderedBroadcast"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = getResultExtras(true).getString("msg"); 
    Log.i(TAG, "SecondReceiver: " + msg); 
    Bundle bundle = new Bundle(); 
    bundle.putString("msg", msg + "@SecondReceiver"); 
    setResultExtras(bundle); 
  } 
} 

public class ThirdReceiver extends BroadcastReceiver { 
  private static final String TAG = "OrderedBroadcast"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = getResultExtras(true).getString("msg"); 
    Log.i(TAG, "ThirdReceiver: " + msg); 
  } 
} 

我们注意到,在FirstReceiver和SecondReceiver中最后都使用了setResultExtras方法将一个Bundle对象设置为结果集对象,传递到下一个接收者那里,这样以来,优先级低的接收者可以用getResultExtras获取到最新的经过处理的信息集合。

代码改完之后,我们需要为三个接收者注册广播地址,我们修改一下AndroidMainfest.xml文件:


<receiver android:name=".FirstReceiver"> 
  <intent-filter android:priority="1000"> 
    <action android:name="android.intent.action.MY_BROADCAST"/> 
    <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
</receiver> 
<receiver android:name=".SecondReceiver"> 
  <intent-filter android:priority="999"> 
    <action android:name="android.intent.action.MY_BROADCAST"/> 
    <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
</receiver> 
<receiver android:name=".ThirdReceiver"> 
  <intent-filter android:priority="998"> 
    <action android:name="android.intent.action.MY_BROADCAST"/> 
    <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
</receiver> 

我们看到,现在这三个接收者的<intent-filter>多了一个android:priority属性,并且依次减小。这个属性的范围在-1000到1000,数值越大,优先级越高。

现在,我们需要修改一下发送广播的代码,如下:


public void send(View view) { 
  Intent intent = new Intent("android.intent.action.MY_BROADCAST"); 
  intent.putExtra("msg", "hello receiver."); 
  sendOrderedBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION"); 
} 

注意,使用sendOrderedBroadcast方法发送有序广播时,需要一个权限参数,如果为null则表示不要求接收者声明指定的权限,如果不为null,则表示接收者若要接收此广播,需声明指定权限。这样做是从安全角度考虑的,例如系统的短信就是有序广播的形式,一个应用可能是具有拦截垃圾短信的功能,当短信到来时它可以先接受到短信广播,必要时终止广播传递,这样的软件就必须声明接收短信的权限。

所以我们在AndroidMainfest.xml中定义一个权限:


<permission android:protectionLevel="normal" 
      android:name="scott.permission.MY_BROADCAST_PERMISSION" /> 

然后声明使用了此权限:


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

然后我们点击发送按钮发送一条广播,控制台打印如下:

我们看到接收是按照顺序的,第一个和第二个都在结果集中加入了自己的标记,并且向优先级低的接收者传递下去。

既然是顺序传递,试着终止这种传递,看一看效果如何,我们修改FirstReceiver的代码,在onReceive的最后一行添加以下代码:


abortBroadcast(); 

然后再次运行程序,控制台打印如下:

此次,只有第一个接收者执行了,其它两个都没能执行,因为广播被第一个接收者终止了。

上面就是BroadcastReceiver的介绍,下面我将会举几个常见的例子加深一下大家对广播的理解和应用:

1.开机启动服务

我们经常会有这样的应用场合,比如消息推送服务,需要实现开机启动的功能。要实现这个功能,我们就可以订阅系统“启动完成”这条广播,接收到这条广播后我们就可以启动自己的服务了。我们来看一下BootCompleteReceiver和MsgPushService的具体实现:


package com.scott.receiver; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
public class BootCompleteReceiver extends BroadcastReceiver { 
  private static final String TAG = "BootCompleteReceiver"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    Intent service = new Intent(context, MsgPushService.class); 
    context.startService(service); 
    Log.i(TAG, "Boot Complete. Starting MsgPushService..."); 
  } 
} 

package com.scott.receiver; 
import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 
public class MsgPushService extends Service { 
  private static final String TAG = "MsgPushService"; 
  @Override 
  public void onCreate() { 
    super.onCreate(); 
    Log.i(TAG, "onCreate called."); 
  } 
  @Override 
  public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i(TAG, "onStartCommand called."); 
    return super.onStartCommand(intent, flags, startId); 
  } 
  @Override 
  public IBinder onBind(Intent arg0) { 
    return null; 
  } 
} 

然后我们需要在AndroidManifest.xml中配置相关信息:


<!-- 开机广播接受者 --> 
<receiver android:name=".BootCompleteReceiver"> 
  <intent-filter> 
    <!-- 注册开机广播地址--> 
    <action android:name="android.intent.action.BOOT_COMPLETED"/> 
    <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
</receiver> 
<!-- 消息推送服务 --> 
<service android:name=".MsgPushService"/> 

我们看到BootCompleteReceiver注册了“android.intent.action.BOOT_COMPLETED”这个开机广播地址,从安全角度考虑,系统要求必须声明接收开机启动广播的权限,于是我们再声明使用下面的权限:


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

经过上面的几个步骤之后,我们就完成了开机启动的功能,将应用运行在模拟器上,然后重启模拟器,控制台打印如下:

如果我们查看已运行的服务就会发现,MsgPushService已经运行起来了。

2.网络状态变化

在某些场合,比如用户浏览网络信息时,网络突然断开,我们要及时地提醒用户网络已断开。要实现这个功能,我们可以接收网络状态改变这样一条广播,当由连接状态变为断开状态时,系统就会发送一条广播,我们接收到之后,再通过网络的状态做出相应的操作。下面就来实现一下这个功能:


package com.scott.receiver; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 
import android.widget.Toast; 
public class NetworkStateReceiver extends BroadcastReceiver { 
  private static final String TAG = "NetworkStateReceiver"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    Log.i(TAG, "network state changed."); 
    if (!isNetworkAvailable(context)) { 
      Toast.makeText(context, "network disconnected!", 0).show(); 
    } 
  } 
   
  public static boolean isNetworkAvailable(Context context) { 
    ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] info = mgr.getAllNetworkInfo(); 
    if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
          return true; 
        } 
      } 
    } 
    return false; 
  } 
} 

再注册一下这个接收者的信息:


<receiver android:name=".NetworkStateReceiver"> 
  <intent-filter> 
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
    <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
</receiver> 

因为在isNetworkAvailable方法中我们使用到了网络状态相关的API,所以需要声明相关的权限才行,下面就是对应的权限声明:


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

我们可以测试一下,比如关闭WiFi,看看有什么效果。

3.电量变化

如果我们阅读软件,可能是全屏阅读,这个时候用户就看不到剩余的电量,我们就可以为他们提供电量的信息。要想做到这一点,我们需要接收一条电量变化的广播,然后获取百分比信息,这听上去挺简单的,我们就来实现以下:


package com.scott.receiver; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.BatteryManager; 
import android.util.Log; 
public class BatteryChangedReceiver extends BroadcastReceiver { 
  private static final String TAG = "BatteryChangedReceiver"; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    int currLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); //当前电量 
    int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);   //总电量 
    int percent = currLevel * 100 / total; 
    Log.i(TAG, "battery: " + percent + "%"); 
  } 
} 

然后再注册一下广播接地址信息就可以了:


<receiver android:name=".BatteryChangedReceiver"> 
  <intent-filter> 
    <action android:name="android.intent.action.BATTERY_CHANGED"/> 
    <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
</receiver> 

当然,有些时候我们是要立即获取电量的,而不是等电量变化的广播,比如当阅读软件打开时立即显示出电池电量。我们可以按以下方式获取:


Intent batteryIntent = getApplicationContext().registerReceiver(null, 
    new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
int currLevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
int total = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1); 
int percent = currLevel * 100 / total; 
Log.i("battery", "battery: " + percent + "%"); 
您可能感兴趣的文章:Android BroadcastReceiver实现网络状态实时监听Android BroadcastReceiver接收收到短信的广播Android运用BroadcastReceiver实现强制下线Android BroadcastReceiver广播注册方式总结深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解Android BroadcastReceiver常见监听整理Android BroadcastReceiver广播机制概述Android采取BroadcastReceiver方式自动获取验证码详解Android中BroadCastReceiver组件Android使用BroadcastReceiver监听网络连接状态的改变


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

android之BroadcastReceiver应用详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

android之BroadcastReceiver应用详解

今天我们来讲一下Android中BroadcastReceiver的相关知识。BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中,广播体现在方方面面,例如当开
2022-06-06

Android提高之BroadcastReceiver实例详解

前面几篇文章分别讨论了Activity和Service,本文就来讨论BroastcastReceiver,Broastcast是应用程序间通信的手段。BroastcastReceiver也是跟Intent紧密相连的,动态/静态注册了Broa
2022-06-06

Android四大组件之BroadcastReceiver详解

BroadcastReceiver是Android四大组件之一,用于接收和处理系统广播或者应用内发送的广播。广播是一种跨组件、跨应用的通信机制,可以用于在应用内部或者应用之间传递消息或者事件。BroadcastReceiver的主要作用是接
2023-08-09

详解Android中BroadCastReceiver组件

BroadcastReceiver也就是“广播接收者”的意思,它是用来接收来自系统和应用中的广播。 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Br
2022-06-06

Android之PreferenceActivity应用详解

为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢? 根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面构建 后者用于设置数据存放 其实 这是正
2022-06-06

Android之PreferenceActivity应用详解(2)

看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找。 PerferenceActivity是什么,看下面的截图: Androi
2022-06-06

Android开发之BroadcastReceiver用法实例分析

本文实例讲述了Android开发中BroadcastReceiver用法。分享给大家供大家参考。具体分析如下: 在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制。 Braodcast Rece
2022-06-06

Android 动画之ScaleAnimation应用详解

android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解Scale
2022-06-06

Android 动画之RotateAnimation应用详解

android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解Rotat
2022-06-06

Android 动画之TranslateAnimation应用详解

android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解Trans
2022-06-06

Android 动画之AlphaAnimation应用详解

android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解Alph
2022-06-06

Android应用框架之应用启动过程详解

在Android的应用框架中,ActivityManagerService是非常重要的一个组件,尽管名字叫做ActivityManagerService,但通过之前的博客介绍,我们知道,四大组件的创建都是有AMS来完成的,其实不仅是应用程序
2022-06-06

Android开发笔记之:AsyncTask的应用详解

AsyncTask的介绍及基本使用方法关于AsyncTask的介绍和基本使用方法可以参考官方文档和《Android开发笔记之:深入理解多线程AsyncTask》这里就不重复。AsyncTask引发的一个问题上周遇到了一个极其诡异的问题,一个
2022-06-06

android基础总结篇之九:Intent应用详解

今天我们来讲一下Android中Intent的原理和应用。前面我们总结了几个Android中重要组件,相信大家对于这些组件已经有了清晰的认识,我们就来看一下几个常见的操作:启动一个Activity:Context.startActivity
2022-06-06

Android之ViewFlipper使用详解

ViewFlipper是Android中的一个控件容器,可以用来展示多个子视图,并且可以通过手势或者代码控制子视图的切换。下面是ViewFlipper的使用详解:1. 在XML布局文件中定义ViewFlipper:```android:id
2023-09-13

Android之Spinner使用详解

Spinner是Android中常用的控件之一,用于显示一个下拉列表,用户可以从中选择一个选项。以下是关于Spinner的使用详解:1. 在布局文件中定义Spinner控件:```xmlandroid:id="@+id/spinner"an
2023-09-09

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录