【问题标题】:Trying to launch one app's activity via separate app尝试通过单独的应用程序启动一个应用程序的活动
【发布时间】:2014-10-07 11:12:05
【问题描述】:

我在 Android 设备上有两个应用程序:

我的应用名为“app1”,以及一个名为“app2”的单独应用,没有设置使用权限元素。

我只是试图通过 app1 调用 app2 的活动。

当我从 adb 尝试时,活动启动得很好,如下所示:

am start -n com.test.app2/.Special

有没有办法在 Eclipse 中编写一个应用程序来做类似于 am 的事情?

我尝试编写 app1 来调用我自己的 .class 文件,该文件以相同的细节开始意图,如下所示:

Intent app1intent = new intent(); 
app1intent.setComponent(new ComponentName("com.test.app2","com.test.app2.Special"));
startActivity(app1intent);  

但是当我尝试这样做时,我看到的只是启动 app1 的同一个白屏。

因此,我想我会直接通过清单文件调用 app2 的 .class 文件。

这是来自 app1 的 AndroidManifest.xml。

我怀疑我缺少一些附加文件作为我的包的一部分,因为此清单仅基于 Eclipse 附带的示例应用程序之一,但可以使用一些帮助。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.app1"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.test.app2.Special"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

【问题讨论】:

    标签: android eclipse


    【解决方案1】:

    试试这个:

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setComponent(new ComponentName("com.test.app2", "com.test.app2.Special"));
    startActivity(intent);
    

    【讨论】:

    • 我已经尝试过了,无法但我得到了这个:java.lang.RuntimeException:无法实例化活动 ComponentInfo{com.test.app1/com.test.app2.Special}:java. lang.ClassNotFoundException: com.test.app2.Special
    • com.test.app2 是否有一个名为 Special 的类?如com/test/app2/Special.java.
    • 是的,它包含 Special.java。我越来越近了。我现在收到此错误: java.lang.SecurityException: Permission Denial: 从 ProcessRecord 启动 Intent { act=android.intent.action.MAIN cat[android.intent.category.LAUNCHER] cmp=com.test.app2/.Special } {41530450 553:com.test.app1/u048} (pid=838, u=10048) 未从 uid 10045 导出
    • app1 的清单现在如下所示:
    • 这里是 app1 的 MainActivity: public class MainActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);按钮 bClock = (Button) findViewById(R.id.button1); bClock.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent(Intent.ACTION_MAIN); i.addCategory(Intent.CATEGORY_LAUNCHER); i.setComponent(new ComponentName("com.test.app1 ", "com.test.app1.Special")); startActivityForResult(i, 0); } }); } }
    【解决方案2】:

    我的应用中有以下功能:

    app1 的代码在Activity:

    Intent launchIntent = new Intent("com.app2.SOMETHING");
    startActivity(launchIntent);
    

    app2 的AndroidManifest.xml,在您要启动的Activity 内:

    <intent-filter>
        <action android:name=com.app2.SOMETHING" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    

    奖金:

    检查设备上是否安装了app2:

     boolean isAppTwoInstalled = false;
     PackageManager packageManager = getPackageManager();
    
     try {
         PackageInfo packageInfo = packageManager.getPackageInfo("com.app2", PackageManager.GET_ACTIVITIES);
         isAppTwoInstalled = true;
     } catch (Exception e) {
         // not installed
     }
    

    【讨论】:

    • 请包含完整的 .java 文件和 app1 的清单文件。当我在清单文件中包含 app2 活动的完整路径时,logcat 似乎继续显示这一点:java.lang.RuntimeException:无法实例化活动 ComponentInfo{com.test.app1/com.test.app2.Special}:java .lang.ClassNotFoundException: com.test.app2.Special .......... 或者,如果我只是引用 app1 的 MainActivity 作为活动名称,我只会看到 app1 呈现的空白白色窗口,即使我真的想要通过 MainActivity.java 文件启动 app2 的活动。
    • 我的示例中没有使用任何 ComponentInfo 实例。请查看我如何设置意图。我无法包含完整的 .java 文件。
    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 2019-01-18
    • 2013-06-24
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多