android 2.2 apidemos 赏析笔记 3
AlarmController.java
SEE:
1.
Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,
0, intent, 0);
// We want the alarm to go off 30 seconds from now.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
SO:
PendingIntent 待响应的意图。有三个主要方法getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, int, Intent, int); 表示可以开启三种类型的东东,设置时间与设置AlarmManager的方法如上。。。
PS:android:process=":remote",代表在应用程序里,当需要该service时,会自动创建新的进程。而如果是android:process="remote",没有“:”分号的,则创建全局进程,不同的应用程序共享该进程。
SEE:
1.
Intent intent = new Intent(AlarmController.this, RepeatingAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,
0, intent, 0);
// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 15*1000;
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 15*1000, sender);
SO:
setRepeating来设置重复,注意到与上面的计时方式不一样.见PS:
PS:
android.os.SystemClock
Class Overview
System.currentTimeMillis()
该时间是基于世界时间的,它返回的是从January 1, 1970 00:00:00 UTC到现在时间已经逝去了多多少millisecond,当我设置Android手机的系统时间时,会应该影响该值。
uptimeMillis()
它表示的是手机从启动到现在的运行时间,且不包括系统sleep(CPU关闭)的时间,很多系统的内部时间都是基于此,比如Thread.sleep(millls), Object.wait(millis), and System.nanoTime()
elapsedRealtime()
它表示的是手机从启动到现在的运行时间,且包括系统sleep(CPU关闭)的时间
SEE:
1.
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.cancel(sender);
SO:
取消重复的操作
AlarmService.java
SEE:
1.
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
// show the icon in the status bar
showNotification();
2.
private void showNotification() {
// In this sample, we'll use the same text for the ticker and the expanded notification
CharSequence text = getText(R.string.alarm_service_started);
// Set the icon, scrolling text and timestamp
Notification notification = new Notification(R.drawable.stat_sample, text,
System.currentTimeMillis());
// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, AlarmService.class), 0);
// Set the info for the views that show in the notification panel.
notification.setLatestEventInfo(this, getText(R.string.alarm_service_label),
text, contentIntent);
// Send the notification.
// We use a layout id because it is a unique number. We use it later to cancel.
mNM.notify(R.string.alarm_service_started, notification);
}
3.
public void onDestroy() {
// Cancel the notification -- we use the same ID that we had used to start it
mNM.cancel(R.string.alarm_service_started);
SO:
Notification(R.drawable.stat_sample, text,System.currentTimeMillis());分别是,标题栏闪过的图片,内容,时间。PendingIntent.getActivity(this, 0,new Intent(this, AlarmService.class), 0);点击通知时的意图;notification.setLatestEventInfo(this, getText(R.string.alarm_service_label),text, contentIntent);下拉通知栏,通知的内容标签,内容,意图。mNM.notify(R.string.alarm_service_started, notification);正式的发送通知,第一个参数是ID,居然用这个字符串资源的值来做ID。懒到极点 我喜欢~
SEE:
1.
Thread thr = new Thread(null, mTask, "AlarmService_Service");
thr.start();
2.
public void run() {
// Normally we would do some work here... for our sample, we will
// just sleep for 30 seconds.
long endTime = System.currentTimeMillis() + 15*1000;
while (System.currentTimeMillis() < endTime) {
synchronized (mBinder) {
try {
mBinder.wait(endTime - System.currentTimeMillis());
} catch (Exception e) {
}
}
}
// Done with our work... stop the service!
AlarmService_Service.this.stopSelf();
}
SO:
AlarmService_Service.this.stopSelf();这个也会调用onDestory()...也就是按下start Alarm Service的时候 显示一个通知,该通知15秒后自动停止,30秒后再显示该通知。。。 蛋疼。
DeviceAdminSample.java
SEE:
1.AndroidManifest.xml
<!-- Device Admin Samples -->
<activity android:name=".app.DeviceAdminSample$Controller"
android:label="@string/activity_sample_device_admin">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample"
android:label="@string/sample_device_admin"
android:description="@string/sample_device_admin_description"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
SO:
这里的DeviceAdminSample是一个receiver,不是妹子不是Activity。controller才是。所以有android:name=".app.DeviceAdminSample$Controller",protected void onCreate()纠结了 静态类不能实例化,难道activity都不实例化的?这个就分析不来 MARK 有知道的告诉声 暂且当成正常的activity...
SEE:
1.
ComponentName mDeviceAdminSample;
2.
mDeviceAdminSample = new ComponentName(Controller.this, DeviceAdminSample.class);
3.
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Additional text explaining why this needs to be added.");
startActivityForResult(intent, RESULT_ENABLE);
4.
mDPM.removeActiveAdmin(mDeviceAdminSample);
SO:
程序动态加载权限。神器呀intent真是变换莫测。DevicePolicyManager.EXTRA_DEVICE_ADMIN="android.app.extra.DEVICE_ADMIN"
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN="android.app.action.ADD_DEVICE_ADMIN" ,EXTRA_ADD_EXPLANATION ="android.app.extra.ADD_EXPLANATION"
SEE:
1.
mPasswordQuality = (Spinner)findViewById(R.id.password_quality);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.password_qualities, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mPasswordQuality.setAdapter(adapter);
mPasswordQuality.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
setPasswordQuality(mPasswordQualityValues[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
}
});
SO:
动态设置Spinner下拉菜单的选项范例。。
SEE:
1.mSetPasswordListener
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
2.
SO:设置密码界面
SEE:
mPasswordLength = (EditText)findViewById(R.id.password_length);
mPasswordLength.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
setPasswordLength(Integer.parseInt(s.toString()));
} catch (NumberFormatException e) {
}
}
});
SO:
textView的监听范例
SEE:
boolean active = mDPM.isAdminActive(mDeviceAdminSample);
if (active) {
mDPM.setPasswordQuality(mDeviceAdminSample, pwQuality);
mDPM.setPasswordMinimumLength(mDeviceAdminSample, pwLength);
mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample, maxFailedPw);
}
SO:
mDPM.isAdminActive(mDeviceAdminSample)//当前设备管理器是否激活,DevicePolicyManager的相关设置
SEE:
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
SO:
打开密码设置界面
SEE:
if (mAM.isUserAMonkey()) {
// Don't trust monkeys to do the right thing!
AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
builder.setMessage("You can't reset my password because you are a monkey!");
builder.setPositiveButton("I admit defeat", null);
builder.show();
return;
}
boolean active = mDPM.isAdminActive(mDeviceAdminSample);
if (active) {
mDPM.resetPassword(mPassword.getText().toString(),
DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
}
SO:
1.mAM.isUserAMonkey(),防止用户胡乱操作修改密码成功。。神奇的函数
(传送门)
2.AlertDialog.Builder范例
3.
mDPM.resetPassword(mPassword.getText().toString(), DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);这就设置密码成功了。。。很危险呀,这不是想改就改了,权限不能乱给的。。手机开不开了就爽了
SEE:
mDPM.lockNow();
SO:黑屏?不,锁屏了。。。叫你随意给权限
SEE:
mDPM.wipeData(0);
SO:
清除用户数据。。数据。。。回复出厂设置吗?
这个速度权限取消了吧
==============================完
AlertDialogSamples
SEE:
1.
@Override
protected Dialog onCreateDialog(int id) {
2.
showDialog(DIALOG_YES_NO_MESSAGE);
SO:
重写方法来创建对话框 而不是直接创建对话框。。新方法
以后创建Dialog可以来这里拉代码 就不多写了
==============================完
Intents.java
SEE:
1.
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*");
startActivity(Intent.createChooser(intent, "Select music"));
SO:
用来打开音乐文件的方法,如果用音乐来打开的话会出错,没有指名音乐路径。Intent.createChooser(intent, "Select music")指定相应的对话框名字。
SEE:
1.
Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,
0, intent, 0);
// We want the alarm to go off 30 seconds from now.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
SO:
PendingIntent 待响应的意图。有三个主要方法getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, int, Intent, int); 表示可以开启三种类型的东东,设置时间与设置AlarmManager的方法如上。。。
PS:android:process=":remote",代表在应用程序里,当需要该service时,会自动创建新的进程。而如果是android:process="remote",没有“:”分号的,则创建全局进程,不同的应用程序共享该进程。
SEE:
1.
Intent intent = new Intent(AlarmController.this, RepeatingAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,
0, intent, 0);
// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 15*1000;
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 15*1000, sender);
SO:
setRepeating来设置重复,注意到与上面的计时方式不一样.见PS:
PS:
android.os.SystemClock
Class Overview
System.currentTimeMillis()
该时间是基于世界时间的,它返回的是从January 1, 1970 00:00:00 UTC到现在时间已经逝去了多多少millisecond,当我设置Android手机的系统时间时,会应该影响该值。
uptimeMillis()
它表示的是手机从启动到现在的运行时间,且不包括系统sleep(CPU关闭)的时间,很多系统的内部时间都是基于此,比如Thread.sleep(millls), Object.wait(millis), and System.nanoTime()
elapsedRealtime()
它表示的是手机从启动到现在的运行时间,且包括系统sleep(CPU关闭)的时间
SEE:
1.
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.cancel(sender);
SO:
取消重复的操作
AlarmService.java
SEE:
1.
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
// show the icon in the status bar
showNotification();
2.
private void showNotification() {
// In this sample, we'll use the same text for the ticker and the expanded notification
CharSequence text = getText(R.string.alarm_service_started);
// Set the icon, scrolling text and timestamp
Notification notification = new Notification(R.drawable.stat_sample, text,
System.currentTimeMillis());
// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, AlarmService.class), 0);
// Set the info for the views that show in the notification panel.
notification.setLatestEventInfo(this, getText(R.string.alarm_service_label),
text, contentIntent);
// Send the notification.
// We use a layout id because it is a unique number. We use it later to cancel.
mNM.notify(R.string.alarm_service_started, notification);
}
3.
public void onDestroy() {
// Cancel the notification -- we use the same ID that we had used to start it
mNM.cancel(R.string.alarm_service_started);
SO:
Notification(R.drawable.stat_sample, text,System.currentTimeMillis());分别是,标题栏闪过的图片,内容,时间。PendingIntent.getActivity(this, 0,new Intent(this, AlarmService.class), 0);点击通知时的意图;notification.setLatestEventInfo(this, getText(R.string.alarm_service_label),text, contentIntent);下拉通知栏,通知的内容标签,内容,意图。mNM.notify(R.string.alarm_service_started, notification);正式的发送通知,第一个参数是ID,居然用这个字符串资源的值来做ID。懒到极点 我喜欢~
SEE:
1.
Thread thr = new Thread(null, mTask, "AlarmService_Service");
thr.start();
2.
public void run() {
// Normally we would do some work here... for our sample, we will
// just sleep for 30 seconds.
long endTime = System.currentTimeMillis() + 15*1000;
while (System.currentTimeMillis() < endTime) {
synchronized (mBinder) {
try {
mBinder.wait(endTime - System.currentTimeMillis());
} catch (Exception e) {
}
}
}
// Done with our work... stop the service!
AlarmService_Service.this.stopSelf();
}
SO:
AlarmService_Service.this.stopSelf();这个也会调用onDestory()...也就是按下start Alarm Service的时候 显示一个通知,该通知15秒后自动停止,30秒后再显示该通知。。。 蛋疼。
DeviceAdminSample.java
SEE:
1.AndroidManifest.xml
<!-- Device Admin Samples -->
<activity android:name=".app.DeviceAdminSample$Controller"
android:label="@string/activity_sample_device_admin">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample"
android:label="@string/sample_device_admin"
android:description="@string/sample_device_admin_description"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
SO:
这里的DeviceAdminSample是一个receiver,不是妹子不是Activity。controller才是。所以有android:name=".app.DeviceAdminSample$Controller",protected void onCreate()纠结了 静态类不能实例化,难道activity都不实例化的?这个就分析不来 MARK 有知道的告诉声 暂且当成正常的activity...
SEE:
1.
ComponentName mDeviceAdminSample;
2.
mDeviceAdminSample = new ComponentName(Controller.this, DeviceAdminSample.class);
3.
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Additional text explaining why this needs to be added.");
startActivityForResult(intent, RESULT_ENABLE);
4.
mDPM.removeActiveAdmin(mDeviceAdminSample);
SO:
程序动态加载权限。神器呀intent真是变换莫测。DevicePolicyManager.EXTRA_DEVICE_ADMIN="android.app.extra.DEVICE_ADMIN"
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN="android.app.action.ADD_DEVICE_ADMIN" ,EXTRA_ADD_EXPLANATION ="android.app.extra.ADD_EXPLANATION"
SEE:
1.
mPasswordQuality = (Spinner)findViewById(R.id.password_quality);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.password_qualities, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mPasswordQuality.setAdapter(adapter);
mPasswordQuality.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
setPasswordQuality(mPasswordQualityValues[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
}
});
SO:
动态设置Spinner下拉菜单的选项范例。。
SEE:
1.mSetPasswordListener
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
2.
SO:设置密码界面
SEE:
mPasswordLength = (EditText)findViewById(R.id.password_length);
mPasswordLength.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
setPasswordLength(Integer.parseInt(s.toString()));
} catch (NumberFormatException e) {
}
}
});
SO:
textView的监听范例
SEE:
boolean active = mDPM.isAdminActive(mDeviceAdminSample);
if (active) {
mDPM.setPasswordQuality(mDeviceAdminSample, pwQuality);
mDPM.setPasswordMinimumLength(mDeviceAdminSample, pwLength);
mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample, maxFailedPw);
}
SO:
mDPM.isAdminActive(mDeviceAdminSample)//当前设备管理器是否激活,DevicePolicyManager的相关设置
SEE:
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
SO:
打开密码设置界面
SEE:
if (mAM.isUserAMonkey()) {
// Don't trust monkeys to do the right thing!
AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
builder.setMessage("You can't reset my password because you are a monkey!");
builder.setPositiveButton("I admit defeat", null);
builder.show();
return;
}
boolean active = mDPM.isAdminActive(mDeviceAdminSample);
if (active) {
mDPM.resetPassword(mPassword.getText().toString(),
DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
}
SO:
1.mAM.isUserAMonkey(),防止用户胡乱操作修改密码成功。。神奇的函数
(传送门)
2.AlertDialog.Builder范例
3.
mDPM.resetPassword(mPassword.getText().toString(), DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);这就设置密码成功了。。。很危险呀,这不是想改就改了,权限不能乱给的。。手机开不开了就爽了
SEE:
mDPM.lockNow();
SO:黑屏?不,锁屏了。。。叫你随意给权限
SEE:
mDPM.wipeData(0);
SO:
清除用户数据。。数据。。。回复出厂设置吗?
这个速度权限取消了吧
==============================完
AlertDialogSamples
SEE:
1.
@Override
protected Dialog onCreateDialog(int id) {
2.
showDialog(DIALOG_YES_NO_MESSAGE);
SO:
重写方法来创建对话框 而不是直接创建对话框。。新方法
以后创建Dialog可以来这里拉代码 就不多写了
==============================完
Intents.java
SEE:
1.
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*");
startActivity(Intent.createChooser(intent, "Select music"));
SO:
用来打开音乐文件的方法,如果用音乐来打开的话会出错,没有指名音乐路径。Intent.createChooser(intent, "Select music")指定相应的对话框名字。
相关推荐
《Android 2.2 ApiDemos深度解析》 在Android开发领域,ApiDemos是一个非常重要的参考资料,它是由Google官方提供的一个示例程序,包含了Android SDK中的各种API功能的演示。这个项目,针对的是Android 2.2(API...
**Android 6.0 API Demos详解** Android 6.0 API Demos 是一个官方提供的示例代码集合,它展示了Android 6.0 (Marshmallow) SDK中的各种API功能和用法。这些示例旨在帮助开发者更好地理解和学习如何在实际应用中...
API Demos 是 Google 为了 Android 开发者所提供的一个 Android API 合集,其中包含了很多的 API 范例,同时遵循了良好的代码规范,是一个值得开发者研究和学习的典型。android的ApiDemos,需要解压缩后使用。
《深入探索Android API Demos:最新实践与技术解析》 Android API Demos是Google官方提供的一款用于展示Android SDK中各种API功能和用法的应用程序,它涵盖了从基础控件到高级特性的全方位示例,是开发者学习...
《Android 1.6 API Demos深度解析》 在Android开发的世界中,API Demos是一个不可或缺的学习资源,它为开发者提供了丰富的示例代码,帮助理解并掌握Android API的各种功能。本篇文章将深入探讨"android1.6 apiDemos...
从官方预览包里提取的Android6.0 ApiDemos.apk,方便安装在真机上查看实例的实际效果。
《Android ApiDemos apk:深入理解Android应用开发的实践指南》 Android ApiDemos apk是Android开发者们熟悉的一个示例程序,它包含了Android SDK中的各种API功能演示,为开发者提供了丰富的学习资源。这个应用程序...
《Android 4.3 ApiDemos深度解析》 在Android操作系统的发展历程中,每个版本的更新都会带来新的特性和API,以提升用户体验和开发者的工作效率。Android 4.3(API级别18)是Android系统的一个重要里程碑,它引入了...
《深入解析Android 4.1 ApiDemos》 在Android开发领域,ApiDemos是一个非常重要的参考资料,它是由Google官方提供的示例代码集合,用于演示Android SDK中的各种API功能。对于开发者来说,尤其是对Android 4.1...
最新版ApiDemos Android SDK 中带有很多例子,其中ApiDemo 详细介绍了Android 平台主要API,分成了 · App · Content · Graphics · Media · OS · Text · Views 几个大类,每个大类又分为几个小类,...
Android 5.1的ApiDemos安装包
《Android 3.0 ApiDemos详解》 在Android开发领域,`ApiDemos`是一个非常重要的学习资源,它是Google官方提供的一款示例程序,包含了Android SDK中的各种API功能演示。这个项目主要用于帮助开发者理解并熟悉Android...
《Android ApiDemos详解——深度探索Android开发应用实例》 Android ApiDemos是Android开发者学习和理解Android API的重要资源,它包含了丰富的示例代码,涵盖了Android SDK中的各种API功能。这个程序是专为Android...
**Android ApiDemos详解** `Android ApiDemos` 是Android系统提供的一款官方示例程序,它集合了Android SDK中的各种API用法,是开发者学习和理解Android开发的关键资源。这个项目旨在通过实例代码来演示Android API...
Android官网ApiDemos源码 供大家学习参考之用
《Android API Demos详解》 Android API Demos是一款由谷歌官方提供的开源项目,它包含了大量Android SDK中的API示例代码,旨在帮助开发者更好地理解和学习如何在实际应用中使用Android的各种功能和API。该项目覆盖...
**Android ApiDemos详解** ApiDemos是Android官方提供的一款示例应用,它包含了Android SDK中的各种API功能演示,帮助开发者了解和学习Android系统提供的各种API接口和功能。这个"Android ApiDemos不报错版本"是...
《Android ApiDemos不报错版本:探索与学习》 Android ApiDemos是Android平台上的一个官方示例项目,它为开发者提供了丰富的API演示,涵盖了Android系统中的各种控件和功能,是学习和理解Android开发的宝贵资源。这...
《Android API 19 ApiDemos详解》 在Android开发领域,API Demos是一个非常重要的学习资源,它包含了Android SDK中的各种API示例代码,帮助开发者深入理解和掌握Android平台的功能特性。本文将针对API Level 19...