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

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

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的声明里添加一个action,代码如下:

 
     
         
     
 

同时启动方法里也添加上该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);
 }

如此也能解决问题。

你可能感兴趣的:(错误记录一:两个应用间页面跳转时的权限错误)