美文网首页
错误记录一:两个应用间页面跳转时的权限错误

错误记录一:两个应用间页面跳转时的权限错误

作者: 简秋默 | 来源:发表于2019-10-23 18:03 被阅读0次

今天开发中遇到个问题,一个应用中启动另一个应用的页面时出现崩溃,跳转的代码如下:

private void startLearningActivity(String text){
        Intent intent = new Intent();
        String packageName="com.xxx.xxxx";
        String className="com.xxx.xxxx.XxxActivity";
        ComponentName name = new ComponentName(packageName, className);
        intent.setComponent(name);
        intent.putExtra("Text", text);  
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
 }

错误log如下:

java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.xxx.xxxxcom.xxx.xxxx.XxxActivity(has extras) } from ProcessRecord{812ad43 4614:com.xxx.xxxxcom/u0a81} (pid=4614, uid=10081) not exported from uid 1000
        at android.os.Parcel.readException(Parcel.java:1599)
        at android.os.Parcel.readException(Parcel.java:1552)
        ......

查找资料后发现目标Activity不支持其他应用调用。解决方法也很简单,给要跳转的目标Activity添加属性android:exported="true",该属性表示支持外部应用调用该页面。
AndroidManifest.xml中代码如下:

    <activity 
            android:name="com.xxx.xxxxcom.XxxActivity"
            android:exported="true">
    </activity>

如此问题就解决了。
还有一种办法,是在目标Activity的声明里添加一个action,代码如下:

 <activity 
     android:name="com.xxx.xxxxcom.XxxActivity">
     <intent-filter >
         <action android:name="android.intent.action.VIEW"/>
     </intent-filter>
 </activity>

同时启动方法里也添加上该action

private void startLearningActivity(String text){
        Intent intent = new Intent("android.intent.action.VIEW");
        String packageName="com.xxx.xxxx";
        String className="com.xxx.xxxx.XxxActivity";
        ComponentName name = new ComponentName(packageName, className);
        intent.setComponent(name);
        intent.putExtra("Text", text);  
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
 }

如此也能解决问题。

相关文章

网友评论

      本文标题:错误记录一:两个应用间页面跳转时的权限错误

      本文链接:https://www.haomeiwen.com/subject/yvnkvctx.html