android – 具有隐式意图的自定义权限

前端之家收集整理的这篇文章主要介绍了android – 具有隐式意图的自定义权限前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
鉴于 Android中的安全模型,我正在尝试使用广播接收器的自定义权限.

我做了什么:

我已经为接收器声明了自定义权限,从而限制了它可以接收的广播.清单中的一些代码

<permission android:name="abc"/>

<receiver android:name=".UpdateUserReceiver"
        android:permission="abc"
        android:enabled="true"
        android:exported="false">

        <intent-filter>
            <action android:name="android.intent.action.ACTION_UPDATE_USERNAME"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</receiver>

现在我希望接收器UpdateUserReceiver只接收来自使用权限’abc’的组件的广播.

广播发送代码

// Update username. Invoke broadcast.
Intent updateUserBroadcast = new Intent();
updateUserBroadcast.putExtra("username",userName);
updateUserBroadcast.setAction("android.intent.action.ACTION_UPDATE_USERNAME");
sendBroadcast(updateUserBroadcast);

发送广播的活动:

<activity android:name=".UpdateUserNameActivity">

        <intent-filter>
            <action android:name="com.intent.action.UPDATE_USERNAME"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</activity>

问题1:
如图所示,活动无处使用接收方声明的权限,以便它可以从活动接收广播.但仍然调用接收器,我怀疑它是由于使用隐式意图虽然我不确定.有任何想法吗?

问题2 :
应用级别声明的权限标记与接收者内部的android:permission标记有什么区别?我理解第二个的使用,它在任何人都可以期待接收者接收广播之前强制执行许可,但是为什么是第一个需要的.是否需要此方案,或者是否可以将其删除.无论哪种方式,我都检查过接收器接收广播.

解决方法

好的,明白你的意思.您可能正在从同一个应用程序发送广播.你试过从不同的应用程序发送广播吗?看看这段代码.有一个PID检查,如果调用PID是相同的应用程序,则默认情况下将授予权限.因此,你的接收器正在执行任何问题.
http://androidxref.com/4.4.4_r1/xref/frameworks/base/core/java/android/app/ActivityManager.java#2109

猜你在找的Android相关文章