首页 文章 精选 留言 我的

精选列表

搜索[安卓系统],共10000篇文章
优秀的个人博客,低调大师

[安卓] 2、使用2中方法做按钮监听和图片按钮使用

第一种方法是使用点击监听器来实现(代码中注释掉的部分):这种方法要在初始化的函数中将按钮绑定在点击监听器上(23,24)btn_ok.setOnClickListener(this);。然后处理统一写在抽象函数onClick(View v) 中,并用v == btn_ok来判别是哪一个按钮的点击。(28~34) 第二种方法是使用内部类实现按键监听,具体如下(这个看起来要代码多一点,各个处理是单独的) 1 package com.himi.button;//包路径 2 //import导入类库 3 4 import android.app.Activity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.view.View.OnClickListener; 8 import android.widget.Button; 9 import android.widget.TextView; 10 11 /* 使用点击监听器接口进行监听 12 public class MainActivity extends Activity implements OnClickListener {//使用点击监听器 13 private Button btn_ok, btn_cancel; 14 private TextView tv; 15 16 @Override 17 public void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.main); 20 btn_ok = (Button) findViewById(R.id.btn_ok); 21 btn_cancel = (Button) findViewById(R.id.btn_cancel); 22 tv = (TextView) findViewById(R.id.tv); 23 btn_ok.setOnClickListener(this);//将btn_ok按钮绑定在点击监听器上 24 btn_cancel.setOnClickListener(this);//将btn_cancel按钮绑定在点击监听器上 25 } 26 27 @Override 28 public void onClick(View v) {//使用监听器就要重写其抽象函数 29 if (v == btn_ok) { 30 tv.setText("确定按钮触发事件!"); 31 } else if (v == btn_cancel) { 32 tv.setText("取消按钮触发事件!"); 33 } 34 } 35 } 36 */ 37 //内部类实现按键监听 38 public class MainActivity extends Activity {// 使用点击监听器 39 private Button btn_ok, btn_cancel; 40 private TextView tv; 41 42 @Override 43 public void onCreate(Bundle savedInstanceState) { 44 super.onCreate(savedInstanceState); 45 setContentView(R.layout.main); 46 btn_ok = (Button) findViewById(R.id.btn_ok); 47 btn_cancel = (Button) findViewById(R.id.btn_cancel); 48 tv = (TextView) findViewById(R.id.tv); 49 btn_ok.setOnClickListener(new OnClickListener() {// 将btn_ok按钮绑定在点击监听器上 50 @Override 51 public void onClick(View v) { 52 tv.setText("确定按钮触发事件!"); 53 } 54 }); 55 btn_cancel.setOnClickListener(new OnClickListener() {// 将btn_cancel按钮绑定在点击监听器上 56 @Override 57 public void onClick(View v) { 58 tv.setText("取消按钮触发事件!"); 59 } 60 }); 61 } 62 63 } 理解了上面的下面的图片按钮也就很简单啦:如下第9行可见我这里用的不是鼠标的点击监听了,而是触屏监听。其中根据触屏事件来更换ImageButton的背景来实现上述效果。这里的图片资源是存起来的,通过调用getResources().getDrawable(R.drawable.xxx)来获取资源。 1 public class MainActivity extends Activity { 2 private ImageButton Ibtn; 3 @Override 4 public void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.main); 7 Ibtn = (ImageButton)findViewById(R.id.imageBtn); 8 //为图片按钮添加触屏监听 9 Ibtn.setOnTouchListener(new OnTouchListener() { 10 @Override 11 public boolean onTouch(View v, MotionEvent event) { 12 //用户当前为按下 13 if(event.getAction()==MotionEvent.ACTION_DOWN){ 14 //设置图片按钮背景图 15 Ibtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.press)); 16 //用户当前为抬起 17 }else if(event.getAction()==MotionEvent.ACTION_UP){ 18 Ibtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.nopress)); 19 } 20 return false; 21 } 22 }); 23 } 24 } 注意:这里的按钮是ImageButton! 本文链接:http://www.cnblogs.com/zjutlitao/p/4229564.html 更多精彩:http://www.cnblogs.com/zjutlitao 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4229564.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

甲骨文称Google的安卓业务创造了310亿美元收入

Google的Android业务如何创造收入?Google Play应用商店的销售收入只是很小一部分,Android业务的大部分收入被认为来自授权。不包含Google服务的Android开源平台AOSP是 免费的,但中国之外销售的绝大部分Android设备都预装了Google服务,而Google服务需要授权才能预装,没人知道授权费用是多少,这是机 密。现在,甲骨文的律师根据Google的机密内部财报称, Google的Android业务创造了310亿美元收入和220亿美元利润。Google律师称,甲骨文律师不当披露了极度敏感的信息,它督促法官修订和密封上周听证会的部分公开文本。Google和甲骨文因为Java版权侵犯打了五年官司。 ====================================分割线================================文章转载自 开源中国社区[http://www.oschina.net]

优秀的个人博客,低调大师

臭名昭著的恶意软件joker感染超50万台安卓用户

研究人员发现,超过50万名Android用户从Google Play下载新的Joker恶意软件,并导致感染。最新的 Joker 恶意软件是在(ColorMessage“com.guo.smscolor.amessage”)的消息传递应用程序中发现,该应用会悄悄地将用户的联系人列表信息发送到攻击者控制的服务器,并在用户不知情的情况下为用户注册不需要的付费高级订阅。 详情 Color Message已从官方应用程序市场中删除。此外,还观察该恶意软件会通过模拟点击从恶意广告中获得收入,并连接到位于俄罗斯的服务器。Joker恶意软件为了避免自身被删除,应用程序能够在安装后隐藏它的图标。 该应用程序非常简洁的条款和条件托管在一个无品牌的单页博客上,并且条款中不会透露该应用程序可以在用户设备上执行的操作的范围。其中一名受害者甚至试图通过法律页面的评论部分联系应用程序的开发者,其他用户则直接在商店应用程序的评论部分抱怨欺诈行为。 自 2017 年发现以来,Joker 一直是臭名昭著的恶意软件,因执行一系列恶意活动而臭名昭著,包括账单欺诈和拦截用户不知道的短信、联系方式和设备信息。这些流氓应用程序继续使用一系列规避策略以绕过 Google Play 的保护,在某些时候使用了伪装和混淆技术,导致其从未被发现。

优秀的个人博客,低调大师

快递信息居然是恶意软件,FluBot安卓木马在欧洲迅速传播

根据Proofpoint的最新分析,FluBot(又名Cabassous)已经开始向西班牙以外的国家蔓延,以英国、德国、匈牙利、意大利和波兰为主要目标。根据监测,仅针对英国,攻击者就动用了700多个域名,感染了超过7000台设备。 此外,还发现攻击者从欧洲向美国用户发送了德语和英语的短信,可能是恶意软件通过手机通讯录的联系人群发的短信。 去年下半年开始运营,到2021年3月时,FluBot已经崭露头角。该恶意软件感染了西班牙超过6万台设备,据称已经从这些设备中收集了超过1100万个电话号码,占西班牙总人口的25%。 攻击者伪装成诸如FedEx、DHL和Correos等快递服务的通知服务与订单状态跟踪的服务,点击链接后就会下载嵌入了FluBot的恶意软件。 FluBot主要针对银行和加密货币的应用程序,除此以外还会收集用户的个人数据。安装后,FluBot会在金融相关的应用程序的登录页面上叠加攻击者自己的页面来劫持凭据。 西班牙当局已经逮捕了四名与FluBot有关的犯罪嫌疑人,但是感染仍在持续,而且已经从西班牙扩展到日本、挪威、瑞典、芬兰、丹麦和荷兰。 FluBot的快速扩张使得德国联邦信息安全局(BSI)和英国国家网络安全中心(NCSC)对公众发出警告,提醒用户警惕此类攻击。 参考来源:TheHackerNews

优秀的个人博客,低调大师

全志A33开发板的安卓控制LED-2-JNI基础

虽然您可以完全使用Java编写应用程序,但有些情况下Java本身并不能满足您的应用程序的需求。当应用程序不能完全用Java编写时,程序员使用JNI编写Java本机方法来处理这些情况。以下示例说明何时需要使用Java本机方法: 标准Java类库不支持应用程序所需的与平台相关的功能。您已经有一个用另一种语言编写的库,并希望通过JNI使其可以访问Java代码。您希望在较低级别的语言(如汇编语言)中实现一小部分时间关键代码。来源:https://docs.oracle.com/javase/1.5.0/docs/guide/jni/ 开发平台 芯灵思SinlinxA33开发板 了解JNI函数 JNI函数就是在native层定义的本地函数,对应于在java层使用native关键字声明的方法的。直白的说,就是在Java层声明,C/C++语言实现的。当然,这个函数并不一般,它会通过JNI某种机制与Java层的方法进行关联,使得Java层代码可以很方便的调用它。 jni函数的语法和调用规则 将java语言的数据类型转换成底层语言调用规则 将java语言的方法调用转换成底层语言函数或方法 jni数据类型的转化 jni在java和C之间建立连接,因此jni首先要统一两者的数据类型 Java Type Native Type Description boolean jboolean unsigned 8 bits byte jbyte signed 8 bits char jchar unsigned 16 bits short jshort signed 16 bits int jint signed 32 bits long jlong signed 64 bits float jfloat 32 bits double jdouble 64 bits void void N/A The following definition is provided for convenience. define JNI_FALSE 0 #define JNI_TRUE 1 The jsize integer type is used to describe cardinal indices and sizes:typedef jint jsize; java中可以直接调用底层语言的函数,jni规定了java调用底层语言的方法签名 java中有重载概念,所以java方法转换成签名,签名再转化为函数 Type Signature Java Type Z boolean B byte C char S short I int J long F float D double L fully-qualified-class [ type type[] For example, the Java method:long f (int n, String s, int[] arr); has the following type signature:(ILjava/lang/String;[I)J jni机制实现 native 声明的函数可以不实现 class Cls { native double f(int i, String s); // 声明为本地方法 static { System.loadLibrary(“库名”); // 通过静态初始化语句块来加载动态库 } } 程序实现测试java代码javah -jni Hello 生成Hello .h 打开Hello .h 文件里面已经写好C函数的名字C代码将C文件制做成共享库.so,注意指定jni.h和jni_md.h文件路径 gcc -shared -fPIC hello.c -o libhello.so -I /usr/java/jdk1.6.0_45/include/ -I /usr/java/jdk1.6.0_45/include/linux/ java Hello 运行程序实验现象

优秀的个人博客,低调大师

安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?

一.首先检查我们的代码: FirstActivity.java(主活动程序当中的代码):Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行。 1 package com.example.lenovo.activitytest; 2 3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.Toast; 10 import android.content.Intent; 11 12 public class FirstActivity extends AppCompatActivity { 13 @Override 14 public boolean onCreateOptionsMenu(Menu menu) { 15 getMenuInflater().inflate(R.menu.main,menu);//第一个参数表示我们通过哪一个资源来引用菜单当中的全部资源 16 // 第二个参数表示菜单被添加到哪一个对象当中 17 return true;//这句话表示我们创建的菜单是可以显示出来的,但是仅仅显示还是不够的,还需要真正地让菜单上的选项起作用。 18 } 19 @Override 20 public boolean onOptionsItemSelected(MenuItem item)//这里定义菜单为一个响应式事件 21 { 22 switch (item.getItemId()) 23 { 24 case(R.id.add_item): 25 26 Toast.makeText(this,"你选择了增加",Toast.LENGTH_SHORT).show(); 27 break; 28 case(R.id.remove_item): 29 Toast.makeText(this,"你选择了减少",Toast.LENGTH_SHORT).show(); 30 break; 31 default://这个关键字是可以不要的 32 } 33 return true;//将菜单当中的显示出来 34 } 35 @Override 36 protected void onCreate(Bundle savedInstanceState) { 37 super.onCreate(savedInstanceState); 38 setContentView(R.layout.first_layout); 39 Button button1=(Button)findViewById(R.id.button_1); 40 button1.setOnClickListener(new View.OnClickListener() { 41 @Override 42 public void onClick(View v) { 43 Toast toast=Toast.makeText(FirstActivity.this,null,Toast.LENGTH_SHORT); 44 toast.setText("只有傻逼才会按这个按钮"); 45 toast.show();//利用这种方法就可以去掉前面的APP名称了,而且这种创建对象的方法也更可以令人理解 46 } 47 }); 48 Button button2=(Button)findViewById(R.id.button_2); 49 button2.setOnClickListener(new View.OnClickListener() { 50 @Override 51 public void onClick(View v) { 52 Toast.makeText(FirstActivity.this,"只有不学习的人才会按这个按钮", 53 Toast.LENGTH_SHORT).show(); 54 } 55 }); 56 Button button4=(Button)findViewById(R.id.button_4); 57 button4.setOnClickListener(new View.OnClickListener() { 58 @Override 59 public void onClick(View v) { 60 /*Intent intent=new Intent(FirstActivity.this,SecondActivity.class); 61 startActivity(intent); 62 我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明 63 *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。 64 Intent intent=new Intent("com.example.lenovo.activitytest.ACTION_START"); 65 startActivity(intent); 66 } 67 }); 68 Button button3=(Button)findViewById(R.id.button_3); 69 button3.setOnClickListener(new View.OnClickListener() { 70 @Override 71 public void onClick(View v) { 72 Intent intent=new Intent(FirstActivity.this,SecondActivity.class); 73 startActivity(intent); 74 } 75 }); 76 77 78 79 } 80 81 } 二.注册在主活动上的代码需要补上: 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.lenovo.activitytest"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/AppTheme"> 12 <activity 13 android:name=".FirstActivity" 14 android:label="这是一个让人感到好笑的APP"> 15 <intent-filter> 16 <action android:name="android.intent.action.MAIN" /> 17 18 <category android:name="android.intent.category.LAUNCHER" /> 19 </intent-filter> 20 </activity> 21 <activity android:name=".SecondActivity" 22 android:label="这是一个严肃的APP"> 23 <intent-filter><!-- 这里是一个隐式的intent申明--> 24 <action android:name="com.example.lenovo.activitytest.ACTION_START"/> 25 <category android:name="android.intent.category.DEFAULT"/> 26 <category android:name="com.example.lenovo.activitytest.MY_CATEGORY"/> 27 </intent-filter> 28 </activity> 29 </application> 30 31 </manifest> 从中我们可以看到我们注册在XML界面上,<intent-filter>后面的代码为<action android:name="com.example.lenovo.activitytest.ACTION_START"/>,action中间name的名称一定要注意。这个里面的名称是不能够乱写的,这里名称将会和刚刚前面主活动当中的代码相呼应: 1 Button button4=(Button)findViewById(R.id.button_4); 2 button4.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 /*Intent intent=new Intent(FirstActivity.this,SecondActivity.class); 6 startActivity(intent); 7 我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明 8 *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。 9 Intent intent=new Intent("com.example.lenovo.activitytest.ACTION_START"); 10 startActivity(intent); 11 } 12 }); 因此我们可以看到,里面的字符串均是com.example.lenovo.activitytest,不能够乱写。这行字符串是怎么得到的呢?我们可以在主活动当中的第一行代码当中可以找到其代码为:package com.example.lenovo.activitytest。这样的话,才可以进行正确地调用主活动当中的方法,实现隐式intent跳转。如果在xml当中仅仅写上:com.example.lenovo.activitytest.ACTION_START的话,这个活动在APP进行运行的时候就不会实现正常的跳转,从而销毁活动,造成失灵。这就是我们Android Stuidio无法实现隐式Intent的原因。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册