华为手机Internal Deep Linking失效,如何在android:exported="false"下解决?
解决方案
方案1:改用显式Intent调用(推荐)
直接指定目标Activity的类名发起调用,无需依赖intent-filter,且不受android:exported="false"限制,是最安全的方式。
替换原来的隐式Intent代码:
// 原隐式调用方式 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("myScheme://your/path")); startActivity(intent);
改为显式调用:
// 显式调用指定Activity Intent intent = new Intent(context, InternalDeepLinkActivity.class); intent.setData(Uri.parse("myScheme://your/path")); startActivity(intent);
方案2:添加自定义签名权限(适配隐式调用场景)
如果必须保留隐式Intent调用(比如WebView内跳转),可以通过自定义签名权限限制仅自身应用能访问该Activity:
- 在
AndroidManifest.xml中定义自定义权限:
<permission android:name="com.your.app.package.permission.ACCESS_DEEP_LINK" android:protectionLevel="signature" />
protectionLevel="signature"确保只有与你的应用签名一致的应用才能申请该权限,避免外部恶意调用。
- 给
InternalDeepLinkActivity添加权限声明:
<activity android:name=".InternalDeepLinkActivity" android:exported="false" android:noHistory="true" android:screenOrientation="portrait" android:permission="com.your.app.package.permission.ACCESS_DEEP_LINK"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="myScheme" /> </intent-filter> </activity>
- 在应用的权限声明中添加该权限:
<uses-permission android:name="com.your.app.package.permission.ACCESS_DEEP_LINK" />
这样华为HMS系统会识别到该权限允许自身应用通过隐式Intent调用目标Activity,同时保证Activity不会被外部未授权应用访问。
内容的提问来源于stack exchange,提问作者haliltprkk
相关产品推荐
相关产品推荐

