我正在开发一个应用程序,该应用程序可以按意图打开其他应用程序,并且可以完美运行,但是现在我需要打开一个特定的活动,我不知道是否有可能。
已经安装了两个应用程序,但是我无法从我的应用程序中打开特定活动。
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
我们将不胜感激任何帮助。
答案 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}}保留下来,否则将无法从其他应用程序启动它。