今天開發(fā)中遇到個(gè)問題,一個(gè)應(yīng)用中啟動(dòng)另一個(gè)應(yīng)用的頁(yè)面時(shí)出現(xiàn)崩潰,跳轉(zhuǎn)的代碼如下:
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);
}
錯(cuò)誤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)
......
查找資料后發(fā)現(xiàn)目標(biāo)Activity不支持其他應(yīng)用調(diào)用。解決方法也很簡(jiǎn)單,給要跳轉(zhuǎn)的目標(biāo)Activity添加屬性android:exported="true",該屬性表示支持外部應(yīng)用調(diào)用該頁(yè)面。
AndroidManifest.xml中代碼如下:
<activity
android:name="com.xxx.xxxxcom.XxxActivity"
android:exported="true">
</activity>
如此問題就解決了。
還有一種辦法,是在目標(biāo)Activity的聲明里添加一個(gè)action,代碼如下:
<activity
android:name="com.xxx.xxxxcom.XxxActivity">
<intent-filter >
<action android:name="android.intent.action.VIEW"/>
</intent-filter>
</activity>
同時(shí)啟動(dòng)方法里也添加上該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);
}
如此也能解決問題。