如何从myapp打开其他应用程序活动?

时间:2018-10-11 04:45:39

标签: android android-intent

我正在开发一个应用程序,该应用程序可以按意图打开其他应用程序,并且可以完美运行,但是现在我需要打开一个特定的活动,我不知道是否有可能。

已经安装了两个应用程序,但是我无法从我的应用程序中打开特定活动。

btnCallActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    Intent intent = new Intent();
                intent.setClassName("com.rayvatapps.flatplan", "com.rayvatapps.flatplan.LoginActivity");
                intent.putExtra("WEBVIEW_URL", "https://google.com/");
                startActivity(intent);
                } catch (Exception e) {
                    Toast.makeText(mContext, "oops...app is not found", Toast.LENGTH_SHORT).show();
                }
            }
        });

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.rayvatapps.flatmaps">

    <application
        android:allowBackup="true"
        android:exported="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity
            android:name=".LoginActivity"
            android:label="Other App"
            android:exported="true">
            <intent-filter>
                <action android:name="com.rayvatapps.flatplan.app.LoginActivity" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我遇到以下错误

Error: No Activity found to handle Intent { act=com.rayvatapps.flatplan.app.LoginActivity }

E/Error: Permission Denial: starting Intent { cmp=com.rayvatapps.flatplan/.LoginActivity (has extras) } from ProcessRecord{4310b06 9701:com.rayvatapps.appdemotest/u0a384} (pid=9701, uid=10384) not exported from uid 10378

我们将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:1)

在“第二次应用活动”的 Manifest.xml中添加意图过滤器-> android.intent.category.DEFAULT

    <activity
        android:name="com.myapp.ActivityName" 
        android:exported="true">
        <intent-filter>
            <action android:name="com.demo.any_name" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

然后从您的应用程序

    Intent launch = new Intent("com.demo.any_name");
    startActivity(launch);

答案 1 :(得分:1)

您的软件包名称和类名称不匹配。根据您要启动的应用程序清单,您需要对此进行更改:

intent.setClassName("com.rayvatapps.flatplan", "com.rayvatapps.flatplan.LoginActivity");

对此:

intent.setClassName("com.rayvatapps.flatmaps", "com.rayvatapps.flatmaps.LoginActivity");

您还不需要在尝试启动的应用程序中的<intent-filter>上的Activity,因为您使用的是显式Intent来启动它。如果删除<intent-filter>,请确保将android:exported="true"的{​​{1}}保留下来,否则将无法从其他应用程序启动它。