intent

Android 蓝牙开发(1)

ぐ巨炮叔叔 提交于 2019-12-31 19:14:34
普通蓝牙设备官方文档 Android 平台包含蓝牙网络堆栈支持 ,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作: 扫描其他蓝牙设备 查询本地蓝牙适配器的配对蓝牙设备 建立 RFCOMM 通道 通过服务发现连接到其他设备 与其他设备进行双向数据传输 管理多个连接 传统蓝牙适用于电池使用强度较大的操作,例如 Android 设备之间的流传输和通信等。针对具有低功耗要求的蓝牙设备,Android 4.3(API 18)中引入了面向低功耗蓝牙的 API 支持。 基础知识 使用 Android Bluetooth API 来完成使用蓝牙进行通信的四项主要任务: 设置蓝牙 、 查找局部区域内的配对设备 或可用设备、 连接设备 ,以及在 设备之间传输数据 。 关于蓝牙的 API 在 android.bluetooth 包中,下面介绍一下和蓝牙相关的主要类 BluetoothAdapter 本地蓝牙适配器,是所有 蓝牙交互的入口点 ,表示蓝牙设备自身的一个蓝牙设备适配器, 整个系统只有一个蓝牙适配器 。通过它可以发现其他蓝牙设备,查询绑定(配对)设备的列表,使用已知的 Mac 地址实例化 BluetoothDevice 以及创建

android之Service之Binder学习

情到浓时终转凉″ 提交于 2019-12-30 22:03:25
一、Binder框架 Binder用于完成进程间通信(IPC),比如普通应用程可以调用音乐服务,它工作在内核态,属于一个驱动,只是这个驱动要用的“硬件”是内存。 Binder架构由三个模块构成:服务端接口,Binder驱动,客户端接口。我们分开来看: 服务端 一个Binber服务端实际上是一个Binder类的对象,且一旦创建,内部就启动一个隐藏线程,用来接收Binder驱动发送的消息,收到消息后,会执行Binder对象中的onTransact()方法,并执照不同的参数执行不同的服务代码,所以实现一个Binder对象一定要重载onTransact()方法,onTransact()方法的参数来自于客户端调用transact()方法时的输入,两者的格式和顺序一定要一样。 Binder驱动 当服务端Binder对象创建时,同时会在Binder驱动中创建一个mRemote对象(这里不会再有新的线程),mRemote也是Binder类。当客户端访问远程服务时,是通过 mRemote对象 。 客户端 要访问服务端,先得到远程对象对应的mRemote对象,然后就可以调用其transact()方法,而在Binder驱动中,mRemote对象也重载了transact()方法,重载的内容重要是: 1.以线程间通信的模式,向服务端发送客户端传递过来的参数。 2.挂起当前线程(客户端线程)

Android之使用Bundle进行IPC

别说谁变了你拦得住时间么 提交于 2019-12-30 21:47:14
一、Bundle进行IPC介绍 四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口,所以它可以方便地在不同的进程之间传输。当然,传输的数据必须能够被序列化,比如基本类型、实现了Parcelable接口的对象、实现了Serializable接口的对象以及一些Android支持的特殊对象,具体内容可以看Bundle这个类,就可以看到所有它支持的类型。Bundle不支持的类型无法通过它在进程间传递数据。 二、使用方法 1.打包数据发送 Intent intent1 = new Intent(MainActivity.this, ThirdActivity.class); Bundle bundle = new Bundle(); bundle.putCharSequence("name", "zhangmiao"); bundle.putInt("age", 20); intent1.putExtras(bundle); startActivity(intent1); 2.接受数据 Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String name = bundle.getString(

Android四大组件之Activity详解

佐手、 提交于 2019-12-30 19:17:50
.Activity的本质 Activity是Android提供的四大组件之一,是进行Android开发必不可少的组件.Activity是一个界面的载体,可以把它与html页面进行类比,html页面由各种各样的标签组成,而Activity则可以由各种控件组成.然而Activity也并不是那么简单.查看Activity类的源码我们就可以看到,这个类大概有六千多行代码,说明Android对Activity的处理是相当复杂的.不过我们平时进行开发的时候不需要了解到那么深入的地步,因为我们可以根据Activity中提供的方法快速的开发,Activity生命周期中涉及到七个回调方法. .Activity的生命周期 Android官方文档给出的Activity生命周期图 当打开一个Activity的时候,会调用这个Activity的onCreate()方法,接着调用onStart()方法,然后调用onResume()方法.当onStart()方法执行之后,我们就可以看到这个Activity界面了.下面通过代码对单个Activity生命周期做进一步的解释. MainActivity.java package com.example.caobotao.activitylifecircle; import android.app.Activity; import android.content

Android进程间通信

試著忘記壹切 提交于 2019-12-29 22:44:30
##Android 进程间通信 在Android开发中线程是CPU调度的最小单元,进程是指一个执行单元,一个进程最少包括一个线程,也就是UI线程。当然也可以有多个线程 因为每个进程都会分配一个虚拟机,而每个虚拟机都对应着不同的内训单元,所以一些传统的通信方式就失去了效果,比如我们定义了一个静态变量a = 0,在A进程赋值a = 1,在b线程中查看还是为0.所以进程间通讯才区别于不同于畅通方式,成为一套体系。 为什么使用多进程? 1、单进程所分配的内存不够,需要更多的内存。在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机的硬件的提升和android系统的改进,虽然可分配内存越来越多,但仍旧可以通过开启多进程来获取更多的内存来处理自己App的业务 2、独立运行的组件,比如个推,它的服务会另开一个进程。 3进行一些“不可告人”的操作的处理,比如双守护进程,来尽力使自己的应用不被系统杀死,或者获取用户的个人信息等其他信息。 进程间通信所要涉及知识点总结: 1序列化 2Binder 3多种进程通信的详细使用方式 4通信方式的选择 第一部分:序列化 进程间通信需要对传输的对象进行序列化的操作,当然像基础类型还有String为例外List ,MapMessage 等都是已经实现了序列化接口。 (1)implements Serializable java提供的接口

音乐播放器的实现

独自空忆成欢 提交于 2019-12-28 23:40:03
strings.xml view plain copy to clipboard print ? <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">MusicPlayer</string> <string name="music_name">曲目</string> <string name="play_text">播放</string> <string name="pause_text">暂停</string> <string name="continue_text">继续</string> <string name="reset_text">重置</string> <string name="stop_text">停止</string> <string name="choose_text">选择</string> <string name="notfoundfile_text">媒体文件不存在</string> <string name="notfoundSdcard_text">SDcard不存在</string> </resources> <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app

Android Intent 总结

戏子无情 提交于 2019-12-28 21:52:31
//打开指定网页 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.google.com")); startActivity(intent); //进行关键字搜索 Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "android"); //keywords: android startActivity(intent); // Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:235345")); startActivity(intent); Uri.parse("prefix:num") // “http:”或“https:”表示网络地址类型, // “tel:”表示电话号码类型,“mailto:”表示邮件地址类型,等 在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则: android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀

腾讯面试官:同学,说说 Applink 的使用以及原理

你离开我真会死。 提交于 2019-12-28 00:56:13
简介 通过 Link这个单词我们可以看出这个是一种链接,使用此链接可以直接跳转到 APP,常用于应用拉活,跨应用启动,推送通知启动等场景。 流程 在AS 上其实已经有详细的使用步骤解析了,这里给大家普及下 快速点击 shift 两次,输入 APPLink 即可找到 AS 提供的集成教程。 在 AS 中已经有详细的使用步骤了,总共分为 4 步 add URL intent filters 创建一个 URL 或者也可以点击 “How it works” 按钮 Add logic to handle the intent 选择通过 applink 启动的入口 activity。 点击完成后,AS 会自动在两个地方进行修改,一个是 AndroidManifest <activity android:name=".TestActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android

IntentService源码分析

☆樱花仙子☆ 提交于 2019-12-27 07:20:53
我们带着问题来看源码! 一. IntentService如何单独开启一个新的工作线程? @Override public void onCreate ( ) { // TODO: It would be nice to have an option to hold a partial wakelock // during processing, and to have a static startService(Context, Intent) // method that would launch the service & hand off a wakelock. super . onCreate ( ) ; // 1 HandlerThread thread = new HandlerThread ( "IntentService[" + mName + "]" ) ; thread . start ( ) ; // 2 mServiceLooper = thread . getLooper ( ) ; //3 mServiceHandler = new ServiceHandler ( mServiceLooper ) ; } 1.实例化HandlerThread新建线程并启动,这里注意HandlerThread 继承自Thread,内部封装了Looper; 2.

startForegroundService() did not then call Service.startForeground()

为君一笑 提交于 2019-12-27 05:36:51
项目在部分9.0手机运行报错:startForegroundService() did not then call Service.startForeground() 查资料发现:是因为8.0以上系统不允许后台应用启动后台服务。所以需要把后台服务设置为前台服务。 并且修改service启动函数。 Intent intent = new Intent(getApplicationContext(), PlayerMusicService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(intent); } else { startService(intent); } 在service的onCreate中加入 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Notification noti = new Notification(); noti.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT; startForeground(1, noti); } 有部分人说有时候还是会报错,可以在onStart