天道酬勤,学无止境

How to know whether Notifications are enabled or not for an application in android?

I've a ListView which has the list of installed applications and for each application, I need to know whether the notifications are enabled or not. Currently I'm using below code to know if the notifications are enabled:

appOpsClass = Class.forName(AppOpsManager.class.getName());
Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class);
Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);
int value = (int)opPostNotificationValue.get(Integer.class);
return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, appUID, appPackage) == AppOpsManager.MODE_ALLOWED);

I got the following exception:

Caused by: java.lang.SecurityException: uid 10062 does not have android.permission.UPDATE_APP_OPS_STATS. W/System.err: at android.os.Parcel.readException(Parcel.java:1683) W/System.err: at android.os.Parcel.readException(Parcel.java:1636) W/System.err: at com.android.internal.app.IAppOpsService$Stub$Proxy.checkOperation(IAppOpsService.java:343)

I've included

<uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS"/>

Still I'm getting the same error. Using what apis can I get the value whether it is blocked or not

评论

I am afraid this is only possible for the current application. That is why the public API of NotificationManager has the function areNotificationsEnabled() for the current package.

When looking into android source code, I found AppNotificationSettings - application notification settings. The first switch indicates, whether notifications are blocked or not. The switch listener is here, which points to NotificationBackend. In this class, there is method:

public boolean getNotificationsBanned(String pkg, int uid)

which uses INotificationManager ( a class generated from .aidl file during compilation) and it's method:

boolean areNotificationsEnabledForPackage(String pkg, int uid);

This is Android private API, cannot be simply invoked. So I tried reflection:

try {
    NotificationManager mNotificationManager = null;
    Class<?> c = Class.forName("android.app.NotificationManager");
    Method method = c.getMethod("getService");
    Object obj = method.invoke(mNotificationManager);
    Class<?> clazz = Class.forName("android.app.INotificationManager$Stub$Proxy");
    Method areNotificationsEnabledForPackage = clazz.getMethod("areNotificationsEnabledForPackage", String.class, int.class);
    boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, getPackageName(), android.os.Process.myUid());
    Log.d(MainActivity.class.getSimpleName(), String.valueOf(blocked));
} catch (Exception e) {
    e.printStackTrace();
}

However, as you can see, you must first create NotificationManager. Sadly, this class is created for package. So the code above will for only for :

boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, getPackageName(), android.os.Process.myUid());

however this will not work :

//InvocationTargetException will be thrown.
boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, "com.android.camera", 10040);

Conclusion:

Cannot be done.

See if you can use NotificationManagerCompat.areNotificationsEnabled() https://developer.android.com/reference/android/support/v4/app/NotificationManagerCompat.html#areNotificationsEnabled()

Android 4.1: How to check notifications are disabled for the application?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • iOS 9:如何检测用户何时对推送通知请求说“不允许”? [复制](iOS 9: How to detect when user said 'Don't Allow' to the push notification request? [duplicate])
    问题 这个问题在这里已经有了答案: 用户拒绝推送通知提示时的回调方法? (11 个回答) 4年前关闭。 在 iOS 9 中,是否有我可以阅读的系统级回调,它告诉我用户是否在推送通知请求上点击了“不允许”? 我用一个自定义屏幕提示用户,通知他们推送通知及其在我的应用程序中的价值。 他们有两个选择,是或否。 如果他们选择是,我请求操作系统推送通知,他们会看到如下图所示的弹出窗口。 现在,如果用户点击 YES,则有一个名为didRegisterForRemoteNotificationsWithDeviceToken的函数,它告诉我该设备已注册推送通知。 我可以用它前进到下一个屏幕(并在注册后将它们带入第一个屏幕) 但是,如何检测用户是否点击了不允许? 我需要知道这一点,以便我可以相应地将用户移动到下一个屏幕(并在注册后将他们带到第一个屏幕)。 如果用户点击“不允许”,则不会调用didFailToRegisterForRemoteNotificationsWithError函数。 这个问题不是重复的,因为该问题接受的答案特定于 iOS 7,而我的问题是特定于 iOS 9。 回答1 从 iOS 8 开始,通知注册过程发生了变化,不再需要用户授予远程通知权限。 您现在可以在技术上注册远程通知,而无需获得用户的许可。 您需要许可的是用户通知设置(警报、声音和徽章)。
  • 如何在 Appcelerator Titanium Dashboard 中配置 Android 推送通知 (GCM)?(How to configure Android Push Notifications (GCM) in Appcelerator Titanium Dashboard?)
    问题 我试着按照说明 为 Android 设备配置推送服务 但是,这些步骤提到“在左侧导航中单击推送通知”但它们不存在...... 创建启用 GCM 的 Google API 项目后,您需要使用您生成的 API 密钥和发件人 ID 更新仪表板中应用程序的设置页面。 要使用仪表板为推送通知配置 Arrow: 打开仪表板并从应用程序下拉菜单中选择您的应用程序。 点击左侧导航栏中的推送通知 <-- MISSING 。 选择 Android 推送选项卡。 在 GCM API 密钥字段中输入服务器密钥,在 GCM 发件人 ID 字段中输入 GCM 发件人 ID。 这是显示列出的内容的屏幕截图... 如果我查看 Arrow(我怀疑它可能会在其中列出)是空的(我没有使用 Arrow - 我认为它是使用声明性 XML 的替代 UI)... 我检查了我的订阅(独立),它表明我应该能够免费发送多达 100 万条推送通知。 有谁知道我如何将 Appcelerator Titanium 项目与 GCM 服务器密钥相关联? 另外,当我查看 Google 的开发者控制台时,我的应用程序(在他们的应用商店中上线)没有列出,所以我创建了一个名为“Gcm”的新应用程序。 Appcelerator Titanium 似乎确认我需要“创建”应用程序,我太担心无法将其命名为与实时应用程序相同的名称。 “Google
  • How to configure Android Push Notifications (GCM) in Appcelerator Titanium Dashboard?
    I've tried to following the instructions Configuring push services for Android devices However, the steps mention 'Click Push Notifications on the left-side navigation' but they don't exist... Once you've created a Google API project with GCM enabled, you need to update your application's settings page in Dashboard with the API key and sender ID you generated. To configure Arrow for push notifications using Dashboard: Open Dashboard and select your application from the Apps drop-down menu. Click Push Notifications on the left-side navigation <-- MISSING. Select the Android Push tab. Enter the
  • 如何将通知从服务器推送到安卓手机(How to do push notification from server to android mobile)
    问题 我对推送通知一无所知。 我在尝试学习。 但我不明白。 我在服务器系统中有一个表 MySQL 数据库。 在表中进行任何更改时,我希望在 android 移动应用程序上显示通知。 任何人都可以提供任何建议吗? 回答1 实际上现在最近主要用于你项目中的推送通知 FCM .... 构建推送通知的最佳链接:链接 执行推送通知的步骤 - Firebase Cloud Messaging Tutorial for Android 转到 firebase 控制台并创建一个新项目。 现在输入您的应用名称并选择您所在的国家/地区。 现在点击将 Firebase 添加到您的 Android 应用程序。 现在您必须输入您的项目包名称并单击添加应用程序。 单击添加应用程序后,您将获得 google-services.json 文件。 在应用端 现在回到你的 android 项目。 转到应用程序文件夹并粘贴 google-services.json 文件现在转到您的根级别 build.gradle 文件并添加以下代码。 一种。 添加这一行类路径 'com.google.gms:google-services:3.0.0' 湾添加这一行 compile 'com.google.firebase:firebase-messaging:9.0.0' 现在同步您的项目。 创建一个名为
  • 为什么setCharacteristicNotification()实际上未启用通知?(Why does setCharacteristicNotification() not actually enable notifications?)
    问题 BluetoothLeGatt Android BLE示例包含以下代码: public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) { if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(TAG, "BluetoothAdapter not initialized"); return; } mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); // This is specific to Heart Rate Measurement. if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) { BluetoothGattDescriptor descriptor = characteristic.getDescriptor( UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG)); descriptor
  • 当我删除我的iOS应用程序时,推送通知状态仍然保留(When I delete my iOS application push notification state remains)
    问题 首次使用Xcode安装iOS应用程序时,iPhone询问我是否要启用推送通知。 我能够发送通知,并且徽章会显示我发送的号码。 当我从iPhone中删除该应用程序并在Xcode中重建它,然后再次将其重新安装到我的iPhone中(使用Xcode)时: 设备不询问我是否要启用推送。 徽章在那里,记得最后一个号码。 我在新设备(安装了IPA)上尝试了相同的应用程序,并且它询问了我的权限。 如何使我的设备完全忘记应用程序? 谢谢 回答1 有一种解决方法,其中包括将系统时间提前两天,重新启动设备,然后将系统时间改回现在。 iOS旨在仅针对每个应用程序每天请求一次推送许可。 在iOS上重置推送通知权限警报第一次启用推送的应用程序注册推送通知时,iOS会询问用户是否希望接收该应用程序的通知。 用户响应此警报后,除非恢复设备或将应用程序卸载至少一天,否则不会再次显示该警报。 如果要模拟应用程序的首次运行,可以将应用程序卸载一天。 通过将系统时钟设置为一天或一天​​以上,完全关闭设备,然后重新打开设备,无需真正等待一天即可实现后者。 http://developer.apple.com/library/ios/#technotes/tn2265/_index.html 回答2 已更新,适用于iOS 7,以及更高版本的Apple文档: 在iOS 7及更高版本上,首次启用推送的应用程序注册推送通知时
  • 用户拒绝“推送通知”提示时的回调方法?(Callback Method if user declines Push Notification Prompt?)
    问题 我的问题是我想显示初始“推送通知”提示的加载屏幕“应用程序希望向您发送推送通知。” 因此,如果用户单击“ yes我可以继续进行操作,然后在随后调用的委托方法中启动应用程序: - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { [self hideLoadingScreen]; } - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error { [self hideLoadingScreen]; } 但是,如果用户单击no ,则不会调用这些方法,这是有道理的。 我的问题是,如果他拒绝,是否有其他不同的委托方法会被解雇? 我的问题是,如果选择no ,则加载屏幕永远不会消失。 所以我不知何故需要知道用户何时完成选择。 回答1 在iOS 7中,当系统的推送通知提示出现时,该应用程序将变为非活动状态,并且将触发UIApplicationWillResignActiveNotification。 同样,当用户响应提示(按“是”或“否”)时
  • 检查 UILocalNotification 弃用后是否启用了用户通知(Check whether user notifications are enabled after UILocalNotification deprecation)
    问题 在我的应用程序中,我希望能够检查用户是否启用了通知。 在 iOS 10 中,我使用委托中的检查来做到这一点。 此检查现已弃用,我想更新它,但我不知道要在 iOS 11 中使用什么。 弃用警告如下: currentUserNotificationSettings' 在 iOS 10.0 中被弃用:使用 UserNotifications 框架的 -[UNUserNotificationCenter getNotificationSettingsWithCompletionHandler:] 和 -[UNUserNotificationCenter getNotificationCategoriesWithCompletionHandler:] 我试图在此警告的帮助下更新代码,但我无法弄清楚。 如果有人无论如何都可以建议获得这样的支票,那将有很大帮助。 我在 iOS 10 上使用的代码如下,谢谢。 let notificationType = UIApplication.shared.currentUserNotificationSettings!.types if notificationType == [] { print("Notifications are NOT enabled") } else { print("Notifications are enabled")
  • 检测iOS8的“允许通知”处于打开/关闭状态(detect “Allow Notifications” is on/off for iOS8)
    问题 我正在尝试检测iOS 8中应用程序的本地通知设置 对于UIUserNotificationSettings ,当我打开所有徽章,声音和警报后,它将返回7。 在该设置中,我关闭了“允许通知”,该应用仍然向我返回7,用于UIUserNotificationSettings(打开徽标,声音和警报)。 有没有一种方法可以检测“允许Notification ”的打开/关闭? - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{ NSLog(@"---notificationSettings.types %d" , notificationSettings.types ); if(notificationSettings.types!=7){ UIAlertView * alert =[[UIAlertView alloc ] initWithTitle:@"Please turn on Notification" message:@"Go to Settings > Notifications > App.\n Switch on Sound, Badge &
  • 静默推送通知仅在设备正在充电和/或应用处于前台状态时传递(Silent push notifications only delivered if device is charging and/or app is foreground)
    问题 我已经实现了无提示推送通知,但是我注意到了一些奇怪的行为。 静默推送通知通过以下方式处理: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 仅当设备正在充电(即,已连接电缆)和/或如果我的应用程序为前台时,才会收到静默推送消息。 如果我断开设备与充电器(或Mac)的连接,则除非应用程序处于前台状态,否则将不再收到静默推送通知。 在这两种情况下,我通常都会收到非静音的推送通知。 如果我再次插入USB电缆,那么我将获得预期的行为,并且无论应用程序是前台还是后台,都将收到无提示推送通知。 我正在使用UILocalNotification,所以我知道收到了什么。 事实证明,在连接的设备上一切正常,这表明我的无声推送通知已正确配置,并且该应用在plist等中设置了正确的背景模式。 在均运行IOS 8或8.1的iPhone 5s,6和iPad 2上,此行为是可重复的。 其他人有没有经历过? 它应该很容易复制。 为什么将设备插入充电器的简单行为会改变接收静默推送通知的能力? 回答1
  • 检查是否在IOS 8中启用了本地通知(Check if Local Notifications are enabled in IOS 8)
    问题 我在Internet上四处寻找如何使用IOS 8创建本地通知。我发现了很多文章,但是没有一篇文章解释如何确定用户是否将“警报”设置为开或关。 有人可以帮帮我!!! 我宁愿使用Objective C而不是Swift。 回答1 您可以使用UIApplication的currentUserNotificationSettings进行检查 if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]){ // Check it's iOS 8 and above UIUserNotificationSettings *grantedSettings = [[UIApplication sharedApplication] currentUserNotificationSettings]; if (grantedSettings.types == UIUserNotificationTypeNone) { NSLog(@"No permiossion granted"); } else if (grantedSettings.types & UIUserNotificationTypeSound &
  • 如何显示 iOS 推送通知弹出窗口? [关闭](How to show iOS Push Notification Popup? [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 7年前关闭。 改进这个问题 我正在尝试向我的应用程序添加推送通知。 我需要知道如何使推送通知弹出窗口出现。 我所涉及的弹出窗口是一个警报视图,它有两个选择,“允许”和“不允许”。 它询问用户是否允许应用程序接收通知和内容。 我试过一遍又一遍地删除我的应用程序并延长时间,但没有任何效果。 另外,如果出现弹出窗口,我怎么知道用户选择的是否不允许/允许? 回答1 在 iOS 上重置推送通知权限警报启用推送的应用程序首次注册推送通知时,iOS 会询问用户是否希望接收该应用程序的通知。 一旦用户对此警报做出响应,除非设备恢复或应用程序已卸载至少一天,否则它不会再次出现。 如果您想模拟应用程序的首次运行,您可以将应用程序卸载一天。 您可以按照以下步骤实现后者,而无需等待一天: 1. Delete your app from the device. 2. Turn the device off completely and turn it back on. 3. Go to Settings > General > Date & Time and set the date ahead a day or more. 4. Turn
  • 使用APNS发送远程推送通知的传递报告-IOS(Delivery report of sending remote push notifications using APNS - IOS)
    问题 我正在使用APNS发送远程推送通知。 要求是将通知传递给应用程序用户时(即使用户没有轻按通知甚至没有看到通知),也要根据通知ID将传递回执发送到Web服务器(即,调用Web服务)。已收到。 APNS没有提供交付报告。 他们是APNS的反馈服务,但是也不提供交付报告。 所以我想知道有什么可能的方法来获取远程推送通知的交付报告。 如果我能够在远程推送通知到达时甚至在APP处于后台或被用户终止时在APP delige或任何其他方式中执行自定义方法,那么它将解决我的问题。 任何帮助将不胜感激。 下面是我当前正在使用的代码,当应用程序在后台运行时,它无法正常工作。 我在中写了一个自定义方法 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 向服务器发送确认通知的确认。 当应用程序处于前台时,所有功能都会完美执行。 但是,当应用程序在后台运行时会出现问题。 编写的自定义方法 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 除非用户通过点击通知栏打开应用程序,否则不会执行
  • Android 4.1:如何检查已禁用应用程序的通知?(Android 4.1: How to check notifications are disabled for the application?)
    问题 Android 4.1为用户提供了一个复选框,用于禁用特定应用程序的通知。 但是,作为开发人员,我们无法知道通知调用是否有效。 我确实需要检查当前应用程序是否禁用了通知,但是我在API中找不到任何设置。 有没有办法在代码中检查此设置? 回答1 你不可能100%不能。 在此Google I / O 2012视频中,系统要求新的通知的项目负责人声明您不能这样做。 编辑 2016年更新:如本Google I / O 2016视频所述,现在您可以检查它。 使用支持库中的NotificationManagerCompat.areNotificationsEnabled()来检查通知是否在API 19+上被阻止。 API 19以下的版本将返回true(启用通知)。 回答2 @blundell的回答是正确的,但是新版本中的更改很小。 NotificationManagerCompat.from(context).areNotificationsEnabled() 回答3 实际上,这很容易做到: /** * Created by desgraci on 5/7/15. */ public class NotificationsUtils { private static final String CHECK_OP_NO_THROW = "checkOpNoThrow"; private
  • 是否可以检测蜂窝网络是否可用?(Is it possible to detect if the cellular network is available?)
    问题 我正在开发一个 iPhone 应用程序,我希望能够检查手机是否能够拨打电话(如果不能,则警告用户)。 这可能是由于没有可用的蜂窝服务或用户将手机置于“飞行模式”。 我环顾了 Apple 的文档,但找不到任何可以让我检查的内容。 我是否遗漏了什么,或者 Apple 没有向应用程序公开这些信息? 编辑:只是强调一下,我对检查 IP 网络连接不感兴趣,但想确定我的应用程序是否可以拨打电话。 回答1 看看可达性.m 。 虽然我对细胞信号强度并不乐观,但如果存在类似的东西,它会包含在这个文件中。 以下是如何使用它来检测网络可达性的示例:http://www.raddonline.com/blogs/geek-journal/iphone-sdk-testing-network-reachability/ 可达性.m: /* ===== IMPORTANT ===== This is sample code demonstrating API, technology or techniques in development. Although this sample code has been reviewed for technical accuracy, it is not final. Apple is supplying this information to help you
  • iOS 8+ 远程通知功能始终启用(iOS 8+ Remote notification capability always enabled)
    问题 对于 iOS >= 8,仅 在我的 AppDelegate 中,我注册用户通知如下: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"didFinishLaunchingWithOptions called"); // iOS >= 8.0 // register to receive user notifications [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; ... } 完成后,我注册远程通知如下: - (void)application:(UIApplication *)application didRegisterUserNotificationSettings
  • 通过 Google Calendar API 发送事件的电子邮件通知(Sending email notifications for Events via Google Calendar API)
    问题 我正在使用calendar.events.insert API 通过 PHP 客户端向我的日历添加一个事件。 已正确插入事件以及API设置的适当值。 然而,同样无法触发对与会者的电子邮件邀请。 我环顾四周,发现请求需要将参数sendNotifications设置为true 。 同样似乎也无济于事。 这是一个示例代码: var request = gapi.client.calendar.events.insert({ "calendarId" : calendarData.id, "sendNotifications": true, "end": { "dateTime": eventData.endTime }, "start": { "dateTime": eventData.startTime }, "summary": eventData.eventName, "attendees": jQuery.map(eventData.attendees, function(a) { return {'email' : a}; }), "reminders": { "useDefault": false, "overrides": [ { "method": "email", "minutes": 15 }, { "method": "popup", "minutes"
  • 启用iOS 8的设备在代码更新后未收到PUSH通知(iOS 8 enabled device not receiving PUSH notifications after code update)
    问题 我最近将其中一部测试iPhone升级到了iOS 8,然后如下升级了PUSH注册代码(使用xCode 6) -(BOOL)hasNotificationsEnabled { NSString *iOSversion = [[UIDevice currentDevice] systemVersion]; NSString *prefix = [[iOSversion componentsSeparatedByString:@"."] firstObject]; float versionVal = [prefix floatValue]; if (versionVal >= 8) { NSLog(@"%@", [[UIApplication sharedApplication] currentUserNotificationSettings]); //The output of this log shows that the app is registered for PUSH so should receive them if ([[UIApplication sharedApplication] currentUserNotificationSettings].types != UIUserNotificationTypeNone) { return YES; } }
  • Android BLE葡萄糖通知(Android BLE notifications for Glucose)
    问题 我厌倦了使用Android BLE SDK与我的Glucose设备进行通信。 我需要UUID 2a18和2a34的setCharacteristicNotification。 我指的是Android官方SDK,如下所示: http://developer.android.com/guide/topics/connectivity/bluetooth-le.html#notification BluetoothGattCharacteristic charGM = mConnGatt.getService(UUID.fromString(BleUuid.SERVICE_GLUCOSE)) .getCharacteristic(UUID.fromString(BleUuid.CHAR_GLUCOSE_MEASUREMENT_STRING)); mConnGatt.setCharacteristicNotification(charGM, enabled); BluetoothGattDescriptor descGM = charGM.getDescriptor(UUID.fromString(BleUuid.CHAR_CLIENT_CHARACTERISTIC_CONFIG_STRING)); descGM.setValue(BluetoothGattDescriptor
  • 如何触发应用程序通过 REST 服务获取数据?(How to trigger an app to fetch data via a REST-Service?)
    问题 我正在寻找一种方法来触发应用程序从远程 REST 服务中获取数据。 该方法不应该需要轮询。 iOS 推送通知似乎不是一个选项,因为它可以被用户停用。 不过,我可能错了。 是否有最佳实践来完成这项工作? 回答1 实际上推送通知是要走的路。 在 ios8 及更高版本上,正是出于您想要的原因,默认情况下会启用推送通知。 您无法向用户显示某些内容(意味着不会显示包含带有警报的 json 的推送),但您的应用正在获取有效负载,并且可以在收到推送后启动操作。 从文档: 用户的通知设置仅控制系统是在屏幕上显示本地通知还是远程通知。 无论通知设置如何,本地和远程通知都会在适当的时间发送到您的应用程序。 回答2 从 Restful 服务中获取数据嘿@Scholle,这可以通过多种方式完成 1. NSURLRequest:通过网络调用 NSURLRequest 并确认 NSURLConnetionDelegate 协议方法。 然后序列化 JSON 响应。 在 NSUrlConnectionDidReceiveData 方法中 NSError *error = nil; NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:myNSData options:kNilOptions error:&error]; if (error