android打开监听
❶ android 怎么自定义监听事件
新建一个android工程,找到工程下res->layout->activity_main.xml文件并打开
从左侧工具栏,拖入button到界面上,button默认id为button1
1、在Activity中给button绑定监听事件(setOnClickListener),代码如下:
//button绑定监听事件
Button btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder build = new Builder(MainActivity.this);
build.setMessage("Test").show();
}
});
2、直接在layout.xml中绑定onclick事件;
同时添加对应的监听事件处理函数
public void Test(View v){
AlertDialog.Builder build = new Builder(this);
build.setMessage("Test").show();
}
运行程序,在模拟器/真机中查看效果
点击button,弹出Test提示框,说明事件绑定成功。
❷ android怎么设置显示监听
activity或Fragment中写代码 1 Textview tv=(Textview)findviewbyid(R.id.xx); 2 tv.set监听 3 tv.gettext.tostring 获取字符 另外输出字符是干嘛
❸ android开发怎么监控来电并监听
实现如下广播,并且在AndroidManifest中进行注册
public class PhoneReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("action"+intent.getAction());
//如果是去电
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
String phoneNumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.d(TAG, "call OUT:" + phoneNumber);
}else{
//查了下android文档,貌似没有专门用于接收来电的action,所以,非去电即来电.
//如果我们想要监听电话的拨打状况,需要这么几步 :
* 第一:获取电话服务管理器TelephonyManager manager = this.getSystemService(TELEPHONY_SERVICE);
* 第二:通过TelephonyManager注册我们要监听的电话状态改变事件。manager.listen(new MyPhoneStateListener(),
* PhoneStateListener.LISTEN_CALL_STATE);这里的PhoneStateListener.LISTEN_CALL_STATE就是我们想要
* 监听的状态改变事件,初次之外,还有很多其他事件哦。
* 第三步:通过extends PhoneStateListener来定制自己的规则。将其对象传递给第二步作为参数。
* 第四步:这一步很重要,那就是给应用添加权限。android.permission.READ_PHONE_STATE
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
//设置一个监听器
}
}
PhoneStateListener listener=new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
//注意,方法必须写在super方法后面,否则incomingNumber无法获取到值。
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
System.out.println("挂断");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("接听");
break;
case TelephonyManager.CALL_STATE_RINGING:
System.out.println("响铃:来电号码"+incomingNumber);
//输出来电号码
break;
}
}
❹ Android 超简单实现网络状态的监听
我们做项目的时候,不可避免的要做网络状态的监听,一般我们都是抽取出一个工具类来实现,比如:
细致的你当然还会再写一个判断网络类型的方法,反手再来一个例:
然后就可以在相应的操作前进行判断网络的判断:
但是这样做也有些问题:
接下来就是本文的重点,如何通过 NetStatusBus 这个库来解决以上问题,让你的网络状态监听变得前所未有的简单粗暴。
到这里就已经结束了,你的所有网络操作已经都可以清晰优雅的在订阅方法中进行处理了,当然你也可以继续往下看。
订阅方法必须填写一个NetType参数,可以通过NetType的值来判断当前网络类型。
@NetSubscribe中 netType为可选值,可以设置订阅的类型,可选值类型如下:
NetType.AUTO
这是默认值,任何网络状态发生变化,该类型订阅者都会被回调。同时会传入NetType参数告知你当前的网络类型,示例如下:
只要当前是由 WIFI 改变引发的网络状态变化,该类型订阅者都会被回调。同时会传入NetType参数告知你当前的网络类型,示例如下:
只要当前是由移动网络改变引发的网络状态变化,该类型订阅者都会被回调。同时会传入NetType参数告知你当前的网络类型,示例如下:
NetType.NONE
只有当网络丢失时,该类型订阅者才会被回调。
有人会觉得,我用个库爽就行了管它的原理干什么?
你放心,我只是小小的描述一下实现方式。
原理简单来说,就是在全局初始化的时候就绑定对网络的变化监听。然后将进行注册的父类所有的订阅方法保存至集合中,这里涉及到一些方法的校验,最后在网络状态发生改变时利用 java 反射机制遍历执行所有订阅方法。熟悉 EventBus 的小伙伴已经看出来了这里借鉴了一小部分 EventBus 的思想。
回到第一步,那么具体是如何绑定对网络状态变化的监听呢?
以前我们是通过注册广播来实现绑定网络变更的监听,在Android 7.0 以后,Google 基于性能和安全原因对广播进行了很多限制,比如监听网络变更的广播 android.net.conn.CONNECTIVITY_CHANGE 使用静态注册的方式则无法生效,而动态注册的方式虽然可以生效但毕竟不是最优解。
同样出于性能和安全,以及拥抱变化的角度,最终我们还是使用官方推荐的方式,利用 ConnectivityManager.NetworkCallback 来进行网络变化的监听,这是在Android 5.0即android api 21推出的API,目前Android 5.0以上的市场占有率在 85%以上,随着国内各大厂商正在积极的推进适配普及Android Q,这个比例还会进一步增大,所以个人人认为无需过于担心低版本适配。
使用的时候出现这个问题是由于少添加了权限。
Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.
java.lang.RuntimeException: Unable to create application com.jiyun.wanandroid.WanApplication: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.
加上这几个权限就好了:
附上原文地址: https://www.jianshu.com/p/2fea980b3e56
❺ android 怎么监听输入大的打开
自己维护一个状态,当你的APP中所有activity全部挂起时,置位。
当你app中任何一个activity继续时,检查该状态,如果已置位,则表明不是从你个activity返回的。自己维护一个状态,当你的APP中所有activity全部挂起时,置位。
当你app中任何一个activity继续时,检查该状态,如果已置位,则表明不是从你个activity返回的。
❻ Android怎样监听并打开关闭GPRS
Intent gpsIntent = new Intent();
gpsIntent.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
gpsIntent.setData(Uri.parse("custom:3"));
try {
PendingIntent.getBroadcast(FusionField.currentActivity, 0,
gpsIntent, 0).send();
} catch (Exception e) {
UtilLog.e("LogicFacade........toggleGPS", e.getMessage());
}
❼ Android 手机软键盘的弹起和关闭的监听
在很多Android App 开发的过程中,需要对Activity 中 软键盘的弹起和关闭进项监听,但是Andoid中并没有提供相对应的api进行监听, 我有一个简单的方法。
首先需要知道一些基础知识
在manifest文件中可以设置Activity的android:windowSoftInputMode属性,这个属性值常见的设置如下:android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
那么这里值的含义列表如下:
1、stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
2、stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
3、stateHidden:用户选择activity时,软键盘总是被隐藏
4、stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
5、stateVisible:软键盘通常是可见的
6、stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
7、adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
8、adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
9、adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
案例:
1.我们需要将监听所在的Activity在Manifest文件中的设置为如下形式:
<activity
android:name="com.zy.project.MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN/>
<category android:name="android.intent.category.LAUNCHER/>
</intent-filter>
</activity>
当有软键盘弹起时,Activity的布局大小会被滚动上去,但是你仍然可以通过滑动浏览所有。
2 需要在外层布局文件设置一个id,并在activity 中设置监听
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnLayoutChangeListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnLayoutChangeListener{
//Activity最外层的Layout视图
private View rootView;
//屏幕高度
private int screenHeight = 0;
//软件盘弹起后所占高度阀值 一般是占用屏幕的1/3
private int keyHeight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rootView = findViewById(R.id.root_layout);
//获取屏幕高度
screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
//阀值设置为屏幕高度的1/3
keyHeight = screenHeight/3;
}
@Override
protected void onResume() {
super.onResume();
//添加layout大小发生改变监听器
rootView.addOnLayoutChangeListener(this);
}
@Override
public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
//old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值
// System.out.println(oldLeft + " " + oldTop +" " + oldRight + " " + oldBottom);
// System.out.println(left + " " + top +" " + right + " " + bottom);
//现在认为只要控件将Activity向上推的高度超过了1/3屏幕高,就认为软键盘弹起
if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){
Toast.makeText(MainActivity.this, "监听到软键盘弹起...", Toast.LENGTH_SHORT).show();
}else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){
Toast.makeText(MainActivity.this, "监听到软件盘关闭...", Toast.LENGTH_SHORT).show();
}
}
本文来自:http://m.blog.csdn.net/bear_huangzhen/article/details/45896333
❽ android5.0如何监听开机
总而言之:要想获得开机广播,你必须在保证两点,1)你的应用程序在安装后必须运行一次;2)你的应用程序没有被强行停止
那么如果要实现开机自启动服务,该怎么实现?直接上源码
1、BootCompletedReceiver.java文件
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d("LibraryTestActivity", "recevie boot completed ... ");
context.startService(new Intent(context, TestService.class));
}
}
配置文件中:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".BootCompletedReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
注意,一定要加上权限,否则就收不到广播咯。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3、安装应用到你的手机后,启动一次该应用,那么下次开机就能收到BOOT_COMPLETED广播,并且就能看到TestService服务启动了。
做了个测试:到设置??>应用程序,找到刚才安装的应用,点击“强行停止”,那么重启手机后,就收不到BOOT_COMPLETED广播了。
如果该应用被有些三方安全软件强制杀掉进程后,重启手机也会收不到BOOT_COMPLETED广播。
❾ android通过什么来监听应用程序的启动
Android中可以使用ActivityManager来获得正在运行或者已经启动的程序,示例如下:
//查询所有正在运行的应用程序信息:包括他们所在的进程id和进程名
//这儿我直接获取了系统里安装的所有应用程序,然后根据报名pkgname过滤获取所有真正运行的应用程序
privateList<RunningAppInfo>queryAllRunningAppInfo(){
pm=this.getPackageManager();
//查询所有已经安装的应用程序
List<ApplicationInfo>listAppcations=pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
Collections.sort(listAppcations,newApplicationInfo.DisplayNameComparator(pm));//排序
//保存所有正在运行的包名以及它所在的进程信息
Map<String,ActivityManager.RunningAppProcessInfo>pgkProcessAppMap=newHashMap<String,ActivityManager.RunningAppProcessInfo>();
=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
//通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
List<ActivityManager.RunningAppProcessInfo>appProcessList=mActivityManager
.getRunningAppProcesses();
for(ActivityManager.:appProcessList){
intpid=appProcess.pid;//pid
StringprocessName=appProcess.processName;//进程名
Log.i(TAG,"processName:"+processName+"pid:"+pid);
String[]pkgNameList=appProcess.pkgList;//获得运行在该进程里的所有应用程序包
//输出所有应用程序的包名
for(inti=0;i<pkgNameList.length;i++){
StringpkgName=pkgNameList[i];
Log.i(TAG,"packageName"+pkgName+"atindex"+i+"inprocess"+pid);
//加入至map对象里
pgkProcessAppMap.put(pkgName,appProcess);
}
}
//保存所有正在运行的应用程序信息
List<RunningAppInfo>runningAppInfos=newArrayList<RunningAppInfo>();//保存过滤查到的AppInfo
for(ApplicationInfoapp:listAppcations){
//如果该包名存在则构造一个RunningAppInfo对象
if(pgkProcessAppMap.containsKey(app.packageName)){
//获得该packageName的pid和processName
intpid=pgkProcessAppMap.get(app.packageName).pid;
StringprocessName=pgkProcessAppMap.get(app.packageName).processName;
runningAppInfos.add(getAppInfo(app,pid,processName));
}
}
returnrunningAppInfos;
}
❿ 大神救命啊!android加监听问题
下个LBE,打开主动防御,在软件权限中设置每个软件的权限,关闭监听语音等功能就是了