如何使用选择器处理从 startActivity 抛出的 SecurityException?

2024-01-02

我在用着

final Intent notice = new Intent();
notice.setType("text/plain");
notice.putExtra(Intent.EXTRA_SUBJECT, "My Subject");
notice.putExtra(Intent.EXTRA_TEXT, "My Text");

try {
  getContext().startActivity(Intent.createChooser(notice, "Send..."));
} catch(final android.content.ActivityNotFoundException ex) {
  Toast.makeText(getContext(), "There are no email clients installed.", Toast.LENGTH_SHORT).show();
} catch(final SecurityException ex) {
  Toast.makeText(getContext(), "Sorry, application does not have permissions to send to this destination.", Toast.LENGTH_SHORT).show();
} // try/catch

如中所示如何从 Android 应用程序发送电子邮件? https://stackoverflow.com/questions/2197741/how-to-send-email-from-my-android-application

但是,有一些应用程序,如果用户选择,则会导致应用程序崩溃SecurityException,因为当前应用程序没有足够的权限来发送意图:



02-05 23:11:33.417: E/AndroidRuntime(20255): java.lang.SecurityException: Permission Denial: starting Intent { typ=text/plain flg=0x3000000 cmp=com.google.android.gm/.AutoSendActivity (has extras) } from ProcessRecord{4084ca60 20255:com.example.myapp/10065} (pid=20255, uid=10065) requires com.google.android.gm.permission.AUTO_SEND
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.os.Parcel.readException(Parcel.java:1322)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.os.Parcel.readException(Parcel.java:1276)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1351)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1374)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.app.Activity.startActivityForResult(Activity.java:2827)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.app.Activity.startActivity(Activity.java:2933)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at com.android.internal.app.ResolverActivity.onIntentSelected(ResolverActivity.java:203)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at com.android.internal.app.ResolverActivity.onClick(ResolverActivity.java:117)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:873)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.widget.AdapterView.performItemClick(AdapterView.java:284)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.widget.ListView.performItemClick(ListView.java:3513)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.os.Handler.handleCallback(Handler.java:587)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.os.Looper.loop(Looper.java:130)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at android.app.ActivityThread.main(ActivityThread.java:3683)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at java.lang.reflect.Method.invokeNative(Native Method)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at java.lang.reflect.Method.invoke(Method.java:507)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-05 23:11:33.417: E/AndroidRuntime(20255):    at dalvik.system.NativeStart.main(Native Method)
  

如您所见,例外情况是没有直接触及我的任何代码。我不想将缺少的权限添加到清单中(我不知道选择器中会显示哪些其他应用程序),但只需处理SecurityException并通知用户。我会在哪里这样做?

在这种情况下,我使用的是 Android 2.3.6。

提前致谢!


但是,有些应用程序如果由用户选择,则会导致应用程序崩溃并出现 SecurityException,因为当前应用程序没有足够的权限来发送意图

这是另一个应用程序中的错误。任何应用程序都不应支持通用Intent动作像ACTION_SEND and需要自定义权限。我真的建议你把这篇文章写下来并发布到http://b.android.com http://b.android.com,以及您可以提供的任何其他信息来重现此错误。我不确定您遇到的是什么应用程序(该软件包表明可能是 Gmail),但它显然是 Google 制作的应用程序。

我不想将缺少的权限添加到清单中(我不知道哪些其他应用程序会显示在选择器中)

更不用说该权限不在SDK中。

但只需处理 SecurityException 并通知用户。我会在哪里这样做?

关键问题是:这个异常是否真的发生在your过程?

如果答案是肯定的,那么Thread and setDefaultUncaughtExceptionHandler()将是您发现问题的地方。您可能已经使用它来绑定崩溃报告者(例如 ACRA)。

如果答案是否定的,那么你就不走运了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用选择器处理从 startActivity 抛出的 SecurityException? 的相关文章

  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • Android 如何更改 OnTouchListener 上的按钮背景

    你好 我在 xml 中有一个按钮 我正在使用OnTouchListener在我的活动中获得button按下并释放 但问题是 当我按下按钮时背景颜色没有改变 当我延长可能的活动时OnClickListener背景正在改变 任何人都可以告诉我的
  • 使用 ADB 命令获取 IMEI 号码 Android 12

    对于 11 之前的 Android 版本 我使用以下命令从我的设备获取 IMEI 号码 adb shell service call iphonesubinfo 4 cut c 52 66 tr d space or adb shell s
  • 播放 SoundCloud 曲目

    我可以在 Android 应用程序中播放 SoundCloud 中的曲目吗 我正在尝试这段代码 但它不起作用 String res https api soundcloud com tracks 84973999 stream client
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • glTexImage2D: 之前出错:( 0x506 内部 0x1908 格式 0x1908 类型 0x1401

    当使用 Android Studio 运行模拟器时 我在模拟器屏幕上看不到任何内容 一切都是黑色的 我得到以下事件日志 模拟器 glTexImage2D 出错了 0x506 内部 0x1908 格式 0x1908 类型 0x1401 我已经
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • Android:滚动 Horizo​​ntalScrollView 时如何禁用 ScrollView 的垂直滚动?

    我正在开发一个带有带有 ScrollView 的 Activity 的 Android 应用程序 其中包含 Horizo ntalScrollView 等内容 当我触摸 Horizo ntalScrollView 时 我想禁用外部 Scro
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 如何在android asynctask中使用inputstream作为参数?

    我正在制作一个 Android 应用程序来跟踪股票详细信息 我将通过 csv 雅虎财经 检索数据 据我所知 在android 4 0中 网络连接无法在主线程上完成 因此 我将使用 asynctask 来建立连接 但是 我在参数方面遇到了一些
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈

随机推荐