以前在学习AlarmManager里面会遇到PendingIntent,相信大家都知道Intent是你的意图,比如你想启动一个Activity,就会通过 Intent来描述启动这个Activity的某些特点,让系统找到这个Activity来启动,而不是启动别的 Activity.StartActivity(intent)就会立即启动这个Activity.而PendingIntent呢?Penging中文意思就是:待定,将来发生或来临。PendingIntent的就的意思就是不是像Intent那样立即发生,而是在合适的时候才会去触发对应的
Intent.有人说这个intent不是你的ap来触发而是交给别的ap来触发。你可以看以下的code来理解:
这是在PackageInstaller的代码
java代码:
private class ClearCacheReceiver extends BroadcastReceiver {
public static final String INTENT_CLEAR_CACHE ="com.android.packageinstaller.CLEAR_CACHE";
@Override
public void onReceive(Context context, Intent intent) {
Message msg = mHandler.obtainMessage(FREE_SPACE);
msg.arg1 = (getResultCode() ==1) ? SUCCEEDED : FAILED;
mHandler.sendMessage(msg);
}
}
java代码:
private void checkOutOfSpace(long size) {
if(localLOGV) Log.i(TAG, "Checking for "+size+" number of bytes");
if (mClearCacheReceiver == null) {
mClearCacheReceiver = new ClearCacheReceiver();
}
registerReceiver(mClearCacheReceiver,new IntentFilter(ClearCacheReceiver.INTENT_CLEAR_CACHE));
PendingIntent pi = PendingIntent.getBroadcast(this,0, new Intent(ClearCacheReceiver.INTENT_CLEAR_CACHE), 0);
mPm.freeStorage(size, pi.getIntentSender());
}
以下是在PackageManagerService的:
java代码:
public void freeStorageAndNotify(final long freeStorageSize, final IPackageDataObserver observer) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.CLEAR_APP_CACHE, null);
// Queue up an async operation since clearing cache may take a little while.
mHandler.post(new Runnable() {
public void run() {
mHandler.removeCallbacks(this);
int retCode = -1;
if (mInstaller != null) {
retCode = mInstaller.freeCache(freeStorageSize);
if (retCode < 0) {
Slog.w(TAG, "Couldn't clear application caches");
}
} //end if mInstaller
if (observer != null) {
try {
observer.onRemoveCompleted(null, (retCode >= 0));
} catch (RemoteException e) {
Slog.w(TAG, "RemoveException when invoking call back");
}
}
}
});
}
相关推荐
在Android开发中,Intent和PendingIntent是两个非常重要的概念,它们在组件间的通信中起到关键作用。Intent可以理解为一种消息传递对象,用于在不同组件之间传递行为和数据,而PendingIntent则是Intent的一种封装,...
当创建PendingIntent时,会根据提供的Intent和Flag来决定哪些应用可以触发这个Intent,以及如何触发。这种设计使得我们可以放心地将PendingIntent传递给第三方应用,如通知系统或闹钟服务。 PendingIntent的创建...
在Android开发中,Intent和PendingIntent是两个非常关键的概念,它们在应用程序的组件间通信中起着重要作用。Intent主要用于启动或传递数据给另一个组件,如Activity、Service或BroadcastReceiver,而PendingIntent...
`PendingIntent`是Android中的一个关键类,它代表一个意图(Intent)的动作,可以在未来的某个时刻由系统或者其他应用触发。`PendingIntent`主要用于跨进程通信,例如在通知(Notification)中使用,当用户点击通知...
1. **创建PendingIntent**: 应用通过Intent和Flags参数创建PendingIntent实例。 2. **传递给外部组件**: 将PendingIntent传递给其他应用或系统服务,如NotificationManager。 3. **外部组件请求执行**: 当外部组件...
本压缩包"Android代码-Intent切换.zip"很可能包含了一些关于如何使用Intent进行界面跳转和数据传递的示例代码。 Intent主要分为显式Intent和隐式Intent两种类型。显式Intent明确指定了要启动的目标组件,通常在同一...
本实验将深入探讨Android Studio中Intent的使用,帮助你更好地理解如何在不同的Activity之间跳转和传递信息。 首先,让我们了解Intent的基本概念。Intent分为两种类型:显式Intent和隐式Intent。显式Intent用于启动...
Intent1_Intent.zip中的源码应该包含了关于Intent的实例和使用方法,让我们一起深入探讨Intent在Android应用中的作用、类型、创建与传递、以及常见用法。 1. **Intent的作用** Intent的主要功能是启动一个活动...
总之,PendingIntent是Android系统中一个强大的工具,它使得Intent的操作可以跨越时间和空间,为应用程序的交互和扩展提供了极大的便利。理解和熟练运用PendingIntent,对于开发高质量的Android应用至关重要。
Notification 和 PendingIntent 是 Android 中两种重要的机制,用于实现系统状态栏中的通知和指定操作的执行。在上面的代码中,我们学习了如何使用 Notification 和 PendingIntent 来实现一个简单的通知机制,并了解...
要用 android.app.PendingIntent.getBroadcast(Context context, int requestCode, Intent intent)来实现控制多个闹钟,关键点在于其中的一个参数requestCode. 举例说明如下: public void setClock(){ if(lva....
3. IntentFlag:在创建PendingIntent时,可以通过setFlags()方法设置Intent标志,比如FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT,它们会影响PendingIntent的行为,如替换已存在的Intent或取消当前PendingIntent并...
综上所述,PendingIntent是Android开发中的一个重要工具,它允许开发者在不同组件之间安全地传递和延迟执行Intent操作,为应用的复杂交互提供了便利。理解并正确使用PendingIntent对于编写健壮、安全的Android应用至...
当创建`PendingIntent`时,需要提供一个Intent实例,这个Intent包含了操作的目标(如ComponentName)、数据(Uri、Extras等)和操作类型(ACTION_VIEW、ACTION_SEND等)。 3. **唯一标识符**:`PendingIntent`通过`...
在Android的`PendingIntent`类中,`getBroadcast`方法是用来创建一个PendingIntent,该Intent将在未来某个时刻由系统广播给指定的BroadcastReceiver。当我们在AppWidget中使用`getBroadcast`时,我们通常是希望在...
Android Proximity Alert 手机接近进警告或提示功能一例 LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //定义接近区域的大致经度、纬度 double longitude = 113.39; ...
`AlarmManager`和`PendingIntent`是Android系统提供的两个关键组件,用于实现这样的定时提醒功能。下面将详细阐述这两个组件的工作原理及其结合使用的方式。 `AlarmManager`是Android系统中的一个服务,它允许应用...
在这个"AndroidIntent切换.zip"压缩包中,可能包含了一系列关于如何在Android应用中使用Intent进行Activity切换的示例和教程。 首先,理解Intent的基本概念是至关重要的。Intent分为显式Intent和隐式Intent。显式...
在Android开发中,Intent是一个非常核心且至关重要的概念。Intent被设计用来在应用程序的不同组件之间进行通信,也可以用于启动服务或者广播数据。本教程将深入探讨Intent的基本使用和功能,帮助初学者理解这一基础...