intent

详解intent和intentfilter

寵の児 提交于 2019-11-28 00:10:34
1.Intent对象简介   Intent中文意思指"意图",按照Android的设计理念,Android使用Intent来封装程序的"调用意图",不管启动Activity、Service、BroadcastReceiver,Android都使用统一的Intent对象来封装这一"启动意图"。此外,Intent也是应用程序组件之间通信的重要媒介。   Android应用程序包含三种重要组件:Activity、Service、BroadcastReceiver,应用程序采用一致的方式启动它们,都是依靠Intent来进行启动的,Intent中封装了程序要启动的意图。   下面是Intent启动不同组件的部分方法:   Activity组件:startActivity(Intent intent);startActivityForResult(Intent intent,int requestCode);   Service组件:startService(Intent intent);bindService(Intent intent,ServiceConnection conn,int flags);   BroadcastReceiver组件:sendBroadcast(Intent intent);sendOrderedBroadcast(Intent intent,String

java.lang.RuntimeException: invalid channel for service notification

本秂侑毒 提交于 2019-11-27 23:54:34
在应用中使用台前服务同时创建通知报: Android 在API26之后原本的NotificationCompat.Builder (Context context)被废弃,创建通知需要使用新的构造器NotificationCompat.Builder (Context context, String channelId) String CHANNEL_ID = "com.example.test"; String CHANNEL_NAME = "TEST"; NotificationChannel notificationChannel = null; NotificationCompat.Builder builder = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

四大组件——广播

大憨熊 提交于 2019-11-27 16:41:08
分类 标准广播 同一时刻接收,不可以截断 有序广播 优先级高的先接收到广播,并且可以截断 注册方式 动态注册 在代码中注册 ps:只能是程序启动的时候接收广播 1.创建新类继承自 BroadcastReceiver,并重写父类的 onReceive()方法,用作接收广播时的逻辑处理方法体 class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show(); } } 2.接着在onCreate()中创建IntentFilter对象和BroadcastReceiver对象,调用方法registerReceiver() 广播注册 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); NetworkChangeReceiver networkChangeReceiver = new

动态权限

↘锁芯ラ 提交于 2019-11-27 12:35:44
//获取日立权限 public void fetchPermission(int requestCode) { int checkSelfPermission; try { checkSelfPermission = ActivityCompat.checkSelfPermission(getActivity(),Manifest.permission.WRITE_CALENDAR); } catch (RuntimeException e) { e.printStackTrace(); return; } // 如果有授权,走正常插入日历逻辑 if (checkSelfPermission == PackageManager.PERMISSION_GRANTED) { //insertCalendar(); // 该方法的实现在文章的后面 return; } else { // 如果没有授权,就请求用户授权 ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.WRITE_CALENDAR, Manifest.permission.READ_CALENDAR}, requestCode); } } @Override public void

安卓开发实战之app之版本更新升级(DownloadManager和http下载)完整实现

ぃ、小莉子 提交于 2019-11-27 10:20:21
转载: https://blog.csdn.net/u013278099/article/details/52692008 前言 本文将讲解app的升级与更新。一般而言用户使用App的时候升级提醒有两种方式获得: 一种是通过应用市场 获取 一种是打开应用之后提醒用户更新升级 而更新操作一般是在用户点击了升级按钮之后开始执行的,这里的升级操作也分为两种形式: 一般升级 强制升级 app升级操作: 应用市场的app升级 在App Store中升级需要为App Store上传新版App,我们在新版本完成之后都会上传到App Store中,在审核完成之后就相当于完成了这个应用市场的发布了,也就是发布上线了。这时候如果用户安装了这个应用市场,那么就能看到我们的App有新版本的升级提醒了。 应用内升级 除了可以在应用市场升级,我们还可以在应用内升级,在应用内升级主要是通过调用服务器端接口获取应用的升级信息,然后通过获取的服务器升级应用信息与本地的App版本比对,若服务器下发的最新的App版本高于本地的版本号,则说明有新版本发布,那么我们就可以执行更新操作了,否则忽略掉即可。 显然应用市场提醒的升级不是我们的重点,本篇主要是对于app升级的场景来进行不同角度的实现,便于以后开发过程中直接拿去用就ok了。 服务器端: 服务端提供一个接口,或者网址,这里提供一个网址如下: http://192

QT 安卓 悬浮窗权限动态申请

淺唱寂寞╮ 提交于 2019-11-27 10:08:58
一:申请方式: String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMISSION"; Intent intent = new Intent(ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent,5004); 二:重载方法监听Intent返回值: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 当otherActivity中返回数据的时候,会响应此方法 // requestCode和resultCode必须与请求startActivityForResult()和返回setResult()的时候传入的值一致。 if(Settings.canDrawOverlays(this.m_instance)) { StartVoiceInit(); }else { //如果没有赋予权限则强制赋权 String ACTION_MANAGE_OVERLAY_PERMISSION =

Android四大组件之Service

£可爱£侵袭症+ 提交于 2019-11-27 10:01:15
前言 Hi,大家好,上一期我们讲了如何使用BroadcastReceiver,这一期我们讲解Android四大组件之Service相关知识。每天一篇技术干货,每天我们一起进步。 耐心专注不仅仅是美德,更是一笔财富。 1.简介与定义 简介 Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。Service可由其他应用组件启动,而且即使用户切换到其他应用,Service仍将在后台继续运行。 此外,组件可以绑定到Service,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,Service可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行。 定义 Service 是一个专门在后台处理长时间任务的 Android 组件。 1. Service 不是一个单独的进程; 2. Service 也不是一个单独的线程; 3. Service 是一个单独的Android组件,Service运行在主线程上,如果想在Service中处理很占时间的操作时,必须在Service中开线程,以降低Activity没有响应的风险; 4. Service 不提供用户界面; 它有两种启动方式: startService 和 bindService 。 2.用途 Service有三个常见用途。 1.功能调度:Service接收指定的广播信息

五大组件之activity(1)

那年仲夏 提交于 2019-11-27 08:39:54
概述 Activities 是一个程序的组件之一。它的主要功能是提供界面。 一个程序一般由多个Activity组成,各activities之间关系很松散,它们之间没有直接的关联。必须有一个activity被指定为主activity,它是程序启动时首先显示的界面。每个activity都可以随意启动其它的activity。每当一个activity被启动,则前一个activity就被停止。一个程序中的所有启动的activity都被放在一个栈中,所以被停止的activity并没有销毁,而在存于棧中。新启动的activity先被存放于栈中,然后获得输入焦点。在当前活动的activity上点返回键,它被从棧中取出,然后销毁,然后上一个activity被恢复。 当一个activity因为新的activity启动而被停止时,它会收到状态变化的通知,这样的变化有多个,每个都会引起系统调用一个相应的回调方法以通知activity,这些回调方法被统称为“生命周期回调方法”。这些回调方法分别在Activity被创建、停止、恢复、销毁时被调用。 如何创建Activity 1 从类activity继承。 2 实现“生命周期回调方法” 两个最重要的方法是: onCreate()--这个是必须实现的函数,在其中做初始化工作。记住:你必须在此函数中调用setContentView()函数的设置Activity的界面

Activity跳转Flag详解

自古美人都是妖i 提交于 2019-11-27 07:45:03
Android 的一个特色就是 application A 的 activity 可以启动 application B 的 activity,尽管 A 和 B 是毫无干系的,而在用户看来,两个场景紧密联系,视觉上二者构成了一个整体。Android 就是把这种误觉定义为 Task,它既不是 class,也不是 AndroidMainifest.xml 中的一个元素。从表现上看 Task 就像是一个 stack,一个一个的 activity 是构成 stack 的元素,做着入栈 (push) 和出栈 (pop-up)这样简单重复性的劳动。 默认的规则总是满足大多数的应用场景,但是也总会有一些例外打破习以为常的惯例。Task 的默认规则同样并非牢不可破,修改的方法还是有的。借助 Intent 中的 flag 和 AndroidMainifest.xml 中 activity 元素的属性,就可以控制到 Task 里 Activity 的关联关系和行为。 在 android.content.Intent 中一共定义了20种不同的 flag,其中和 Task 紧密关联的有四种: 1.FLAG_ACTIVITY_NEW_TASK 2.FLAG_ACTIVITY_CLEAR_TOP 3.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 4.FLAG_ACTIVITY

Activity Intent详解

时间秒杀一切 提交于 2019-11-27 07:44:47
1、Intent简介 Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各个属性。下面就来介绍一下Intent的各种发展,以及Android如何根据不同属性来启动相应的组件。Intent是由Component、Action、Data、Category、Extra及Flag六部分组成的,接下来将分别对其进行详细介绍。 (1) Component name 组件名称实际上就是一个ComponentName对象,用于标识唯一的应用程序组件,即指明了期望的Intent组件,这种对象的名称是由目标组件的类名与目标组件的包名组合而成的。 需要注意的是Component name是一个 可选项 ,如果被设置,那么Intent对象就 显式 指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。 组件名称通过 setComponent() , setClass() , setClassName() 设置,通过 getComponent() 获取。 intent.setClassName("com.example.testb", "com.example.testb.MainActivity"); ComponentName com=new ComponentName(