0

A_appとB_appの2つのアプリを作成しました。
A_appで、B_appを呼び出し、B_appのCalledActivityを起動します。
ただし、B_appのMAINActivityは、CalledActivityではなくMainActiityです。
A_appで、以下のコードを試してB_appを呼び出します。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("com.example.bapp","com.example.bapp.BActivity"));
intent.putExtra ("test2abc", "abctest2");
startActivity(intent);

また、B_appのBActivityには、onCreateに次のようなコードがあります。

Bundle params = getIntent().getExtras();
if (params != null) {
    String temp = params.getString ("test2abc");
    Toast.makeText (BActivity.this, temp, Toast.LENGTH_LONG).show();
}

ただし、以下のようなエラーがあります。

01-10 10:47:16.904: E/AndroidRuntime(8355): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cmp=com.example.bapp/.BActivity (has extras) } from ProcessRecord{418a3788 8355:com.dlink.nas/u0a7} (pid=8355, uid=10007) not exported from uid 10115

B_appは、他の呼び出しなしでA_appによって直接呼び出されるだけです。
どうすれば修正できますか?

4

1 に答える 1

2

BActivityこれをの<activity>ノードの下の「B_app」Androidマニフェストに追加する必要があります。

 android:exported="true"

したがって、次のようになります。

<activity android:name=".Bactivity" 
  android:label="@string/b_activity"
  android:exported="true">
<!--rest of activity node -->
</activity>

「エクスポート」する別の方法は、インテントフィルターを設定することです(これもマニフェストにあります)。

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

Androidはデフォルトですべてのアクティビティへのアクセスを許可していないため、メインのアクティビティのみにアクセスできます。

編集した質問に回答するには、このSOの回答に示すように、アプリがエクスポートせずに互いのコンポーネントを呼び出せるようにする方法があります。マニフェストに属性sharedUserLabelと属性を追加する必要があります。sharedUserIdただし、動作にわずかな変化が生じる可能性があるため、推奨されないことに注意してください。

于 2013-01-10T03:19:42.917 に答える