Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

trying to send intent to other app: error SecurityException: Permission Denial: starting Intent

I'm trying to send an intent from app A to app B. In the activity of app A I do the following:

Intent i = new Intent();
i.setAction("com.example.test2.REQUEST_RESPONSE");
i.putExtra("info", "bla bla bla");
startActivityForResult(i, 0);

In app B I have the following activity in the manifest:

    <activity android:name=".Receiving"
        android:label="@string/app_name"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.example.test2.REQUEST_RESPONSE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

and this in the activity's onCreate:

Intent intent = getIntent();
if (intent.getAction().equals("com.example.test2.REQUEST_RESPONSE")) {
    Log.e("Received", "Intent received thank you!");
}

With this I receive the following error:

01-18 12:30:44.950: E/AndroidRuntime(31200): FATAL EXCEPTION: main
01-18 12:30:44.950: E/AndroidRuntime(31200): java.lang.RuntimeException: Unable to     resume activity {com.example.test/com.example.test.MainActivity}:     java.lang.SecurityException: Permission Denial: starting Intent { act=example.test2.REQUEST_RESPONSE cmp=example.test2/.Receiving (has extras) } from ProcessRecord{41ae02d8 31200:com.example.test/u0a10107} (pid=31200, uid=10107) not exported from uid 10115
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.os.Looper.loop(Looper.java:137)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityThread.main(ActivityThread.java:5039)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at java.lang.reflect.Method.invokeNative(Native Method)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at java.lang.reflect.Method.invoke(Method.java:511)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at dalvik.system.NativeStart.main(Native Method)
01-18 12:30:44.950: E/AndroidRuntime(31200): Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=com.example.test2.REQUEST_RESPONSE cmp=com.example.test2/.Receiving (has extras) } from ProcessRecord{41ae02d8 31200:com.example.test/u0a10107} (pid=31200, uid=10107) not exported from uid 10115
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.os.Parcel.readException(Parcel.java:1425)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.os.Parcel.readException(Parcel.java:1379)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1870)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1412)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.Activity.startActivityForResult(Activity.java:3370)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.Activity.startActivityForResult(Activity.java:3331)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at com.example.test.MainActivity.onResume(MainActivity.java:125)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.Activity.performResume(Activity.java:5182)
01-18 12:30:44.950: E/AndroidRuntime(31200):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
01-18 12:30:44.950: E/AndroidRuntime(31200):    ... 12 more

If I remove the category from the intent filter I get this error instead:

01-18 12:21:03.059: E/AndroidRuntime(30865): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.example.test2.REQUEST_RESPONSE (has extras) }

Any ideas?

like image 601
just_user Avatar asked Dec 12 '22 18:12

just_user


1 Answers

Change Activity Manifest Tag as below so that it opens the Second App.

<activity android:name=".Receiving"
        android:label="@string/app_name"
        android:exported="true" >
        <intent-filter>
            <action android:name="com.example.test2.REQUEST_RESPONSE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

The reason it is Crashing is because you set android:exported="false" which mean that other process cannot access this Activity. So you set it to true and do the same it will not crash.

like image 147
TNR Avatar answered Dec 14 '22 07:12

TNR