intent

android-job 调度任务

匿名 (未验证) 提交于 2019-12-03 00:41:02
Android-job 链接地址 JobManger 策略式调用不同策略实现调度任务,单例类,通常在app中进行初始化; JobManager.create(this).addJobCreator(new XXXJobCreator()); 初始化create JobManager时: 创建 JobCreatorHolder , JobExecutor , JobStorage 也可开启重新调度的服务JobRescheduleService ; 创建完毕后通过sendAddJobCreatorIntent()方法:将 JobCreator 中的广播接受者的子类都通过addJobCreator(..)加入到 JobManager中管理; JobApi 枚举类,所有异步调度的策略; 主要判断该策略是否支持环境,以及创建 JobProxy 的代理类; JobProxy 为 每个JobApi的代理接口;提供 job的执行方式,一次性执行或周期性执行等,及Common常用方法; JobProxy JobManager schedule->两个boolean periodic , flexSupport 判断是Proxy调用不同的抽象方法 -> planOneOff(request)/一次性的执行方法 planPeriodic(request)/重复性的执行方法

Android 蓝牙BLE开发详解

匿名 (未验证) 提交于 2019-12-03 00:40:02
蓝牙是一种短距离的无线通信技术,可以实现固定设备、移动设备之间的数据交换。一般将蓝牙分为两大类,蓝牙3.0规范之前的版本称为传统蓝牙,蓝牙4.0规范之后的版本称为低功耗蓝牙,也就是常说的BLE(Bluetooth Low Energy)。 本文主要讲解的是Android设备与BLE设备之间的通信,Android 从4.3版本(API Level 18)开始支持BLE通信。 看图说话: 首先要判断当前的Android设备是否支持蓝牙,如果支持则再判断当前蓝牙是否处于开启状态,如果未开启则发送广播通知系统开启蓝牙,蓝牙开启后开始搜索周围的蓝牙设备,注意搜索一定要设置超时处理,搜索到指定蓝牙设备后停止搜索任务。 此时可以以列表的形式供用户选择需要连接的设备,或者内部自动连接特定的设备,连接成功后,搜索此蓝牙设备提供的服务(特性、描述符的集合),搜索完成后设置一些对应的参数,即可与蓝牙设备进行通信了。 看下我们在开发过程中需要用到的一些API: 1.BluetoothAdapter 本地蓝牙适配器,用于一些蓝牙的基本操作,比如判断蓝牙是否开启、搜索蓝牙设备等。 2.BluetoothDevice 蓝牙设备对象,包含一些蓝牙设备的属性,比如设备名称、mac地址等。 3.BluetoothProfile 一个通用的蓝牙规范,设备之间按照这个规范来收发数据。 4.BluetoothGatt

开源项目源码解析-Android Lock Pattern 源码解析

眉间皱痕 提交于 2019-12-03 00:37:04
Android Lock Pattern 源码解析 本文为 Android 开源项目源码解析 中 android-lockpattern 部分 项目地址: android-lockpattern ,分析的版本: 40293d2250c2 ,Demo 地址:等待添加 分析者: 爱早起 ,校对者: Trinea ,校对状态:未完成 1. 介绍 1.1 关于 Android 的图案密码解锁,通过手势连接 3 * 3 的点矩阵绘制图案表示解锁密码。基于 Android Source Code 。 1.2 特点 支持: Android 1.6+ (API 4+)。 无特殊依赖。 支持手机与平板的布局。 Stealth mode (invisible pattern)。 包含 5 种主题: Dark/Light Light with dark action bar (API 14+) Dark/Light dialogs 有验证码模式。 1.3 使用 1.3.1 Manifest 配置 <activity android:name="com.haibison.android.lockpattern.LockPatternActivity" android:theme="@style/Alp.42447968.Theme.Dark" /> 1.3.2 创建图形锁模式 private static

从Android源代码来看WiFi直连

匿名 (未验证) 提交于 2019-12-03 00:37:01
在Android的 设置->网络与互联网->WLAN->WLAN偏好设置->高级->WLAN直连 中可以找到关于Wi-Fi直连的设置,如下: 在参考其它博客时,写出来的代码并不能搜索到Wi-Fi中的其他设备,但是在这设置里面却可以。因此,找来其Android8.0的源代码作为参考,并成功解决问题。 源代码位置: /packages/apps/Settings/src/com/android/settings/wifi/p2p/WifiP2pSettings.java 在线Android8.0 WiFi直连相关源代码 < uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" /> < uses-permission android:name = "android.permission.CHANGE_WIFI_STATE" /> < uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" /> < uses-permission android:name = "android.permission.CHANGE_NETWORK_STATE" /> < uses-permission android:name =

Android---消息通知Notifycation

匿名 (未验证) 提交于 2019-12-03 00:36:02
代码: public class MainActivity extends AppCompatActivity { private final int NOTIFY_ID = 0x123 ; //通知的ID @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_main ); //获取通知管理器,用于发送通知 NotificationManager notificationManager = (NotificationManager) getSystemService( NOTIFICATION_SERVICE ); NotificationCompat.Builder notification = new NotificationCompat.Builder(MainActivity. this ); // 创建一个Notification对象 // 设置打开该通知,该通知自动消失 notification.setAutoCancel( true ); // 设置显示在状态栏的通知提示信息 notification.setTicker( "subtitle" ); //

使用极光推送同时推送多条消息,且都打开同一界面时遇到的问题

匿名 (未验证) 提交于 2019-12-03 00:32:02
使用激光推送推送多条消息,且它们打开的都是同一个含有webview的activity,用webview显示不同信息。 无论是Standard模式还是singleTask模式都不会刷新页面,即如图片中那样,我在测试2页面直接点击测试3的通知,没有任何反应,页面没有刷新数据。 解决办法是使用singleTask模式会调用onNewIntent方法,我们在onNewIntent中设置intent, setIntent(intent) ; 不设置这个的话获取到的intent的是以前的intent,没法获取到最新的intent。 我们设置了 setIntent(intent) ;之后就可以获取到intent传过来的数据,对数据进行刷新了,也可直接在onNewIntent()中进行数据刷新。 文章来源: 使用极光推送同时推送多条消息,且都打开同一界面时遇到的问题

Android启动动画实现

匿名 (未验证) 提交于 2019-12-03 00:32:02
首先提一下实现机制: 1.将manifest中launcher页设为我们需要显示的启动页面。 2.在启动动画页面中我们先加载我们需要的启动页面(动画、文字、广告等)。 3.在启动页的activity中利用线程的postDelayed方法来延迟3s,3s后便执行跳转到主界面或者 登录界面(也可以通过检查SharedPreferences中是否记住了用户历史账号信息,有记住就直接 执行登录操作,没有就跳转到登录页面)。 PS:解决启动页面白屏 : 传送 实现步骤: 一、新建启动页StartActivity package cn.com.box.black.bbnotepad.Activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.annotation.RequiresApi; import android.support.v4.content

Service

匿名 (未验证) 提交于 2019-12-03 00:30:01
Service service是一个可以在后台执行、长时间运行而不提供用户界面的应用组件,也可为其他应用提供一些功能接口。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。所谓的后台是相对前台而言的,具体就是说不依赖于用户界面。 service不是进程,不是线程。但service运行于所在进程的主线程,它有独立的生命周期。 下载文件,播放音乐,购买车票 等等 private static final String TAG = "servers" ; @Override public void onCreate () { super .onCreate(); Log.e(TAG, "onCreate: .................." ); } @Override public int onStartCommand ( final Intent intent, int flags, int startId) { new Thread( new Runnable() { int content= 0 ; String name=intent.getStringExtra( "name" ); @Override public void run () { while (content< 100 ){ try { Thread.sleep( 1000 );

有序广播

匿名 (未验证) 提交于 2019-12-03 00:30:01
MianActivity public class MainActivity extends AppCompatActivity { public static final String ACTION = "ordered_broadcast_action" ; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 发送广播 public void sendBroadcast (View view) { Intent intent = new Intent(ACTION); intent.putExtra( "msg" , "广播内容" ); // 发送有序广播 sendOrderedBroadcast(intent, null ); } } FirstReceiver(接收器代表) public class FirstReceiver extends BroadcastReceiver { @Override public void onReceive (Context context, Intent intent) { String msg =

StandardGSYVideoPlayer视频播放

匿名 (未验证) 提交于 2019-12-03 00:30:01
< com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer android :id= "@+id/detail_player" android :layout_width= "match_parent" android :layout_height= "250dp" /> //加载视频 videoUrl = dataBean .getVideoUrl(); viewHolder . detail_player .setUpLazy( videoUrl , true , null , null , "哈哈哈" ); //全屏动画 viewHolder . detail_player .setShowFullAnimation( true ); //设置返回键 viewHolder . detail_player .getBackButton().setVisibility(View. GONE ); //设置全屏按键功能 viewHolder . detail_player .getFullscreenButton().setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { viewHolder . detail