android接口,Android接口

如何调用android的系统接口

显示网页:

城口网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联

1. Uri uri = Uri.parse("");

2. Intent it = new Intent(Intent.ACTION_VIEWuri);

3. startActivity(it);123123

显示地图:

1. Uri uri = Uri.parse("geo:38.-77.");

2. Intent it = new Intent(Intent.Action_VIEWuri);

3. startActivity(it);123123

路径规划:

1. Uri uri = Uri.parse("");

2. Intent it = new Intent(Intent.ACTION_VIEWURI);

3. startActivity(it);123123

拨打电话:

调用拨号程序

1. Uri uri = Uri.parse("tel:xxxxxx");

2. Intent it = new Intent(Intent.ACTION_DIAL uri);

3. startActivity(it);

4. 1. Uri uri = Uri.parse("tel.xxxxxx");

2. Intent it =new Intent(Intent.ACTION_CALLuri);

3. 要运用这个必须在配置文件中加入12345671234567

发送SMS/MMS

调用发送短信的程序

1. Intent it = new Intent(Intent.ACTION_VIEW);

2. it.putExtra("sms_body" "The SMS text");

3. it.setType("vnd.android-dir/mms-sms");

4. startActivity(it);1234512345

发送短信

1. Uri uri = Uri.parse("smsto:03");

2. Intent it = new Intent(Intent.ACTION_SENDTO uri);

3. it.putExtra("sms_body" "The SMS text");

4. startActivity(it);12341234

发送彩信

1. Uri uri = Uri.parse("content://media/external/images/media/23");

2. Intent it = new Intent(Intent.ACTION_SEND);

3. it.putExtra("sms_body" "some text");

4. it.putExtra(Intent.EXTRA_STREAM uri);

5. it.setType("image/png");

6. startActivity(it);123456123456

发送Email

1.

2. Uri uri = Uri.parse("mailto:");

3. Intent it = new Intent(Intent.ACTION_SENDTO uri);

4. startActivity(it);

1. Intent it = new Intent(Intent.ACTION_SEND);

2. it.putExtra(Intent.EXTRA_EMAIL "");

3. it.putExtra(Intent.EXTRA_TEXT "The email body text");

4. it.setType("text/plain");

5. startActivity(Intent.createChooser(it "Choose Email Client"));

1. Intent it=new Intent(Intent.ACTION_SEND);

2. String[] tos={""};

3. String[] ccs={""};

4. it.putExtra(Intent.EXTRA_EMAIL tos);

5. it.putExtra(Intent.EXTRA_CC ccs);

6. it.putExtra(Intent.EXTRA_TEXT "The email body text");

7. it.putExtra(Intent.EXTRA_SUBJECT "The email subject text");

8. it.setType("message/rfc822");

9. startActivity(Intent.createChooser(it "Choose Email Client"));12345678910111213141516171819201234567891011121314151617181920

添加附件

1. Intent it = new Intent(Intent.ACTION_SEND);

2. it.putExtra(Intent.EXTRA_SUBJECT "The email subject text");

3. it.putExtra(Intent.EXTRA_STREAM "");

4. sendIntent.setType("audio/mp3");

5. startActivity(Intent.createChooser(it "Choose Email Client"));123456123456

播放多媒体

1.

2. Intent it = new Intent(Intent.ACTION_VIEW);

3. Uri uri = Uri.parse("");

4. it.setDataAndType(uri "audio/mp3");

5. startActivity(it);

1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI "1");

2. Intent it = new Intent(Intent.ACTION_VIEW uri);

3. startActivity(it);123456789123456789

Uninstall 程序

1. Uri uri = Uri.fromParts("package" strPackageName null);

2. Intent it = new Intent(Intent.ACTION_DELETE uri);

3. startActivity(it);12341234

* 安装指定apk

*

进入联系人页面

Intent intent=newIntent();

intent.setAction(Intent.ACTION_VIEW);

intent.setData(People.CONTENT_URI);

startActivity(intent);12341234

/检查指定联系人

Uri personUri=ContentUris.withAppendedId(People.CONTENT_URI info.id);//info.id联系人ID

Intent intent=newIntent();

intent.setAction(Intent.ACTION_VIEW);

intent.setData(personUri);

startActivity(intent);1234512345

调用系统安装一个apk

Intent intent=newIntent();

intent.setDataAndType(Uri.parse()"application/vnd.android.package-archive");

startActivity(intent);123123

//调用相册

public static final String MIME_TYPE_IMAGE_JPEG = "image/*";

public static final int ACTIVITY_GET_IMAGE = 0;

Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);

getImage.addCategory(Intent.CATEGORY_OPENABLE);

getImage.setType(MIME_TYPE_IMAGE_JPEG);

startActivityForResult(getImage ACTIVITY_GET_IMAGE);12345671234567

//调用系统相机应用程序,并存储拍下来的照片

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

time = Calendar.getInstance().getTimeInMillis();

intent.putExtra(MediaStore.EXTRA_OUTPUT Uri.fromFile(new File(Environment

.getExternalStorageDirectory().getAbsolutePath()+"/tucue" time + ".jpg")));

startActivityForResult(intent ACTIVITY_GET_CAMERA_IMAGE);

@paramapkname apk名称

publicvoidsetupAPK(String apkname){

String fileName=Environment.getExternalStorageDirectory()+"/"+apkname;

Intent intent=newIntent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(newFile(fileName))"application/vnd.android.package-archive");

mService.startActivity(intent);

}1234567891011121312345678910111213

android进阶-AIDL之接口注册/解注册

AIDL-基本使用

AIDL-自定义数据类型

AIDL-修饰符in,out,inout

AIDL-重连方法

AIDL-接口注册/解注册

AIDL-连接池

为什么要特意讲解一下接口的注册与取消注册呢,因为在使用AIDL进程跨进程通信的时候, 每次传递的接口对象在内存中的地址都是不一样的 ,所以在注册了之后,无法使用常规的方式去取消, 因为注册和解注册传递的接口地址都不一样 ,系统无法识别

由于上面的问题,AIDL中提供了一个专门解决上述情况的类 RemoteCallbackList ,其工作原理就是:

首先,在前面讲解 AIDL的基本使用 的基础上先增加新的AIDL接口以及注册和解注册方法:

然后就是 RemoteCallbackList 的使用方法了:

注册/解注册很简单

接着是使用接口的方式:

ps: 需要注意的是 beginBroadcast() 方法和 finishBroadcast() 方法 必须配合使用 ,哪怕只是简单的获取集合大小

使用AIDL进行跨进程间通信中,往往我们是需要注册监听,让服务端通知的,但是服务端也必须提供解注册的方法,不然客户端如果离开某个界面不想再接受消息了,虽然直接离开不做处理客户端这边不会出错,但是服务端那边的监听集合还存在之前的,那么就会浪费系统资源,所以有注册监听的时候,最好也要实现解注册的方法

《Android开发艺术探索》

Android原生编解码接口 MediaCodec 之——完全解析

MediaCodec 是Android 4.1(api 16)版本引入的编解码接口, Developer 官网 上描述的已经很清楚了。可以配合 中文翻译 一起看。理解更深刻。

MediaCodec的工作流程:

从上图可以看出 MediaCodec 架构上采用了2个缓冲区队列,异步处理数据,并且使用了一组输入输出缓存。

你请求或接收到一个空的输入缓存(input buffer),向其中填充满数据并将它传递给编解码器处理。编解码器处理完这些数据并将处理结果输出至一个空的输出缓存(output buffer)中。最终,你请求或接收到一个填充了结果数据的输出缓存(output buffer),使用完其中的数据,并将其释放给编解码器再次使用。

具体工作如下:

MediaCodec的基本调用流程是:

1.初始化MediaCodec,方法有两种,分别是通过名称和类型来创建,对应的方法为:

2.配置编码器,设置各种编码器参数(MediaFormat),这个类包含了比特率、帧率、关键帧间隔时间等。然后再调用 mMediaCodec .configure,对于 API 19 以上的系统,我们可以选择 Surface 输入:mMediaCodec .createInputSurface,

3.打开编码器,获取输入输出缓冲区

获取输入输出缓冲区在api19 上是以上方式获取,api21以后 可以使用直接获取ByteBuffer

4.输入数据,有2种方式,一种是普通输入,一种是Surface 输入

普通输入又可区分为两种情况,一种是配合MediaExtractor ,一种是取原数据;

返回一个填充了有效数据的input buffer的索引,如果没有可用的buffer则返回-1,参数为超时时间(TIMES_OUT),单位是微秒,当timeoutUs==0时,该方法立即返回;当timeoutUs0时,无限期地等待一个可用的input buffer,当timeoutUs0时,

等待时间为传入的微秒值。

上面输入缓存的index,通过getInputBuffers()得到的是输入缓存数组,通过index和输入缓存数组可以得到当前请求的输入缓存,在使用之前要clear一下,避免之前的缓存数据影响当前数据,接着就是把数据添加到输入缓存中,并调用queueInputBuffer(...)把缓存数据入队;

5.输出数据

通常编码传输时每个关键帧头部都需要带上编码配置数据(PPS,SPS),但 MediaCodec 会在首次输出时专门输出编码配置数据,后面的关键帧里是不携带这些数据的,所以需要我们手动做一个拼接;

6.使用完MediaCodec后释放资源

要告知编码器我们要结束编码,Surface 输入的话调用 mMediaCodec .signalEndOfInputStream,普通输入则可以为在 queueInputBuffer 时指定 MediaCodec.BUFFER_FLAG_END_OF_STREAM 这个 flag;告知编码器后我们就可以等到编码器输出的 buffer 带着 MediaCodec.BUFFER_FLAG_END_OF_STREAM 这个 flag 了,等到之后我们调用 mMediaCodec .release 销毁编码器

流控就是流量控制。 为什么要控制,就是为了在一定的限制条件下,收益最大化!

涉及到了 TCP 和视频编码:

对 TCP 来说就是控制单位时间内发送数据包的数据量,对编码来说就是控制单位时间内输出数据的数据量。

TCP 的限制条件是网络带宽,流控就是在避免造成或者加剧网络拥塞的前提下,尽可能利用网络带宽。带宽够、网络好,我们就加快速度发送数据包,出现了延迟增大、丢包之后,就放慢发包的速度(因为继续高速发包,可能会加剧网络拥塞,反而发得更慢)。

视频编码的限制条件最初是解码器的能力,码率太高就会无法解码,后来随着 codec 的发展,解码能力不再是瓶颈,限制条件变成了传输带宽/文件大小,我们希望在控制数据量的前提下,画面质量尽可能高。

一般编码器都可以设置一个目标码率,但编码器的实际输出码率不会完全符合设置,因为在编码过程中实际可以控制的并不是最终输出的码率,而是编码过程中的一个量化参数(Quantization Parameter,QP),它和码率并没有固定的关系,而是取决于图像内容。 这一点不在这里展开,感兴趣的朋友可以阅读视频压缩编码和音频压缩编码的基本原理。

无论是要发送的 TCP 数据包,还是要编码的图像,都可能出现“尖峰”,也就是短时间内出现较大的数据量。TCP 面对尖峰,可以选择不为所动(尤其是网络已经拥塞的时候),这没有太大的问题,但如果视频编码也对尖峰不为所动,那图像质量就会大打折扣了。如果有几帧数据量特别大,但仍要把码率控制在原来的水平,那势必要损失更多的信息,因此图像失真就会更严重。 这种情况通常的表现是画面出现很多小方块,看上去像是打了马赛克一样,导致画面的局部或者整体看不清楚的情况

配置时指定目标码率和码率控制模式:

码率控制模式有三种:

码率控制模式在 MediaCodecInfo.EncoderCapabilities 类中定义了三种,在 framework 层有另一套名字和它们的值一一对应:

动态调整目标码率:

Android 流控策略选择

下面展示使用MediaExtractor获取数据后,用MediaMuxer重新写成一个MP4文件的简单栗子

android 接口有哪些作用

1. 多个 Interface 可以同时被一个类继承的特性可以弥补 Java 单继承的缺点,增强其可扩展性;

2. 定义公共接口和公共回调方法可以规范代码;

android 接口和抽象的区别

抽象类:

含有abstract修饰符的class

即为抽象类,

abstract类不能创建实例对象,

含有abstract的方法的类必须定义为abstract

class

abstract

class

里的方法不必是抽象的,

抽象来中定义抽象方法必须放在具体子类中实现,所以,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有方法,那么,子类也必须定义为抽象类。

接口:

接口(interface)可以说成是抽象类的特例。接口中的所有方法都必须是抽象的,接口中的方法定义默认为public

abstract

。接口中的变量是全局常量,即public

static

final修饰的。

语法上的区别:

1,抽象类里可以有构造方法,而接口内不能有构造方法。

2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。

3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。

4,抽象类中的抽象方法的访问类型可以是public

,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public

abstract类型。

5,抽象类中可以包含静态方法,接口内不能包含静态方法。

6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public

static类型,并且默认为public

static类型。

7,一个类可以实现多个接口,但只能继承一个抽象类。

再补充点两者在应用上的区别:


网页题目:android接口,Android接口
标题链接:http://pwwzsj.com/article/dsihcie.html