作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 AlarmManager
来实现一些警报调度。因为当触发警报时,我想使用 WakefulBroadcastReceiver
启动 IntentService
来做一些后台工作。
我有一些与为警报 Intent 传递的参数的安全/隐私有(private)关的问题。
Intent myIntent = new Intent(context, MyReceiver.class);
myIntent.putExtra("test", "testValue");
Bundle bundle = new Bundle();
bundle.putParcelable("bundleValue", bundleTestValue2);
myIntent.putExtra("test3", bundle);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 323,
myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Extra
的值有多私密?是否有机会被其他应用程序读取,因为 Android Alarm 的管理器在预定后正在使用它们?
public class MyReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
startWakefulService(context, MyIntentService);
}
<receiver
android:name=".receivers.MyReceiver"
android:exported="false"/>
<service
android:name=".MyIntentService"
android:exported="false"/>
public class MyIntentService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
try {
//logic here
} catch{
} finaly{
MyReceiver.completeWakefulIntent(intent);
}
}
sendBroadcast(new Intent(context, MyReceiver.class).putExtra(...);
Intent myIntent = new Intent(context, MyReceiver.class);
myIntent.putExtra("test", "testValue");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 323,
myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
WakefullBroadcastReceiver
似乎是保证我的服务将获得部分唤醒锁的唯一方法,我如何确保 100% 没有其他应用程序知道我的接收器,并且我的接收器不会收到任何其他调用,除了来自我的 Activity 还是来自我的设置
Alarm
?
WakefullBroadcastReceiver
模式与 CommonsWare 的
WakefulIntentService 相比如何工作?
WakefulBroadcastReceiver
和 IntentService
在我的 Android Manifest 中都声明为 exported="false"
,据我了解,这意味着只有我的应用程序可以访问它们。由于接收器没有导出,它是否接收来自应用程序外部的广播? PendingIntent
:Intent myIntent = new Intent(context, MyReceiver.class);
myIntent.putExtra("databaseId", "1");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 323,
myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
sendBroadcast(new Intent(context, MyReceiver.class).putExtra("databaseId", "1"));
最佳答案
与 Intent
相关的隐私注意事项其他
一般来说,我会说将敏感数据放入 Intent
是一种不安全的做法。 .
理论上,如果 Intent
只能由特定应用程序使用(稍后讨论),那么只有该应用程序才能看到其内容。但是,鉴于大量的 Android 设备和操作系统版本(包括根设备和自定义 ROM),我不会指望它。
您没有指定要传入的敏感数据类型 Intent
额外的,因此我只能给出这些一般性建议:
Intent
中传递敏感数据的方法(我自己从来没有遇到过这样的需求)。 Intent
中传递敏感数据附加功能 - 考虑对其进行加密。加密模型应该足以满足数据的“ secret 级别”,以及如果该数据被拦截可能造成的潜在危害(它可以一直上升到“服务器端”加密)。 BroadcastReceiver
相关的隐私/安全注意事项
BroadcastReceiver
是接收“系统范围”广播的组件。广播是“系统范围的”这一事实本身就应该说明与之相关的隐私级别。
BroadcastReceiver
拥有该权限将接收广播。 BroadcastReceiver
通过特定权限过滤传入的广播,然后只有带有该权限的广播才会被传递给该接收者。 Service
由
AlarmManager
发起将有机会获得唤醒锁 - 这种方法不适合 OP 的情况。
PendingIntent
开始所需的
Service
在您的应用程序中,您可以一次获得所有内容:
PendingIntent
和相关的Intent
开始一个特定的Service
在您的应用程序中(按名称),因此没有其他应用程序可以拦截它(理论上,请记住上面的讨论)。 Service
可以不导出,因此没有其他应用程序可以以任何方式访问它。 关于android - AlarmManager 和 WakefullBroadcastReceiver 传递的 Extras 有多私密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900706/
我想要一个本地Gitorious无法在我的本地网络之外访问的安装,并且尽可能安全和私密。存储库将保存我需要保密和安全的代码,以防黑客攻击或盗窃。 我不是 Linux 专家,当然也不是 git/gito
一旦我创建了 FormData var form = new FormData(); form.append("hash", this.S.Storage.get('h_token')); 我不能将它
我是一名优秀的程序员,十分优秀!