【问题标题】:Invoke an application from another application (Intent)从另一个应用程序调用一个应用程序(意图)
【发布时间】:2014-08-26 07:13:32
【问题描述】:

美好的一天! android java上的菜鸟。

我一直在搜索整个 Stackoverflow 并询问了很多关于 Intent 的问题。这可能是我要做的最后一篇文章,因为我一直在 StackOverFlow 上充斥着关于 Intent 的多余问题。

我不想完全被勺子喂饱,所以我创建了两个快速的 android 应用程序。一个用于主启动器,第二个用于调用应用程序。我在主启动器上添加了一个按钮,下面是该按钮的代码,根据本教程 (https://www.youtube.com/watch?v=qurvm-E9AiU) 似乎是正确的。

public void ClickMe(View v) {
    Intent i=new Intent(this, com.idd.applicationtocall.MainActivity.class);
    startActivity(i);
}

启动后,单击按钮后应用程序崩溃。我不知道怎么了。我几乎尝试了所有我认为对他们有用的推荐答案。下面是我创建的两个快速应用程序的下载链接。我不想让你完成它,因为我不会从中学到任何东西。我只是想让你们告诉我我错过了什么,我做错了什么或者我对 Intent 函数有什么不理解。

https://www.mediafire.com/?wflsmaah5n7x49y

我正在为我的模拟器使用 Java Eclipse 和 BlueStacks。

下面是logcat:

08-26 15:22:11.197: E/dalvikvm(13823): Could not find class 'com.idd.applicationtocall.MainActivity', referenced from method com.idd.applicationtolaunch.MainActivity.ClickMe
08-26 15:22:11.197: W/dalvikvm(13823): VFY: unable to resolve const-class 1140 (Lcom/idd/applicationtocall/MainActivity;) in Lcom/idd/applicationtolaunch/MainActivity;
08-26 15:22:11.197: D/dalvikvm(13823): VFY: replacing opcode 0x1c at 0x0002
08-26 15:22:11.227: I/PGA(13823): New SOCKET connection: icationtolaunch (pid 13823, tid 13823)
08-26 15:22:14.897: D/AndroidRuntime(13823): Shutting down VM
08-26 15:22:14.897: W/dalvikvm(13823): threadid=1: thread exiting with uncaught exception (group=0xb2c00180)
08-26 15:22:14.897: I/Process(13823): Sending signal. PID: 13823 SIG: 9
08-26 15:22:14.897: D/AndroidRuntime(13823): procName from cmdline: com.idd.applicationtolaunch
08-26 15:22:14.897: E/AndroidRuntime(13823): in writeCrashedAppName, pkgName :com.idd.applicationtolaunch
08-26 15:22:14.897: D/AndroidRuntime(13823): file written successfully with content: com.idd.applicationtolaunch StringBuffer : ;com.idd.applicationtolaunch
08-26 15:22:14.897: E/AndroidRuntime(13823): FATAL EXCEPTION: main
08-26 15:22:14.897: E/AndroidRuntime(13823): java.lang.IllegalStateException: Could not execute method of the activity
08-26 15:22:14.897: E/AndroidRuntime(13823):    at android.view.View$1.onClick(View.java:3044)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at android.view.View.performClick(View.java:3511)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at android.view.View$PerformClick.run(View.java:14105)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at android.os.Handler.handleCallback(Handler.java:605)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at android.os.Handler.dispatchMessage(Handler.java:92)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at android.os.Looper.loop(Looper.java:137)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at android.app.ActivityThread.main(ActivityThread.java:4424)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at java.lang.reflect.Method.invokeNative(Native Method)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at java.lang.reflect.Method.invoke(Method.java:511)
08-26 15:22:14.897: E/AndroidRuntime(13823):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
08-26 15:23:39.927: E/dalvikvm(14122): Could not find class 'com.idd.applicationtocall.MainActivity', referenced from method com.idd.applicationtolaunch.MainActivity.ClickMe
08-26 15:23:39.927: W/dalvikvm(14122): VFY: unable to resolve const-class 1140 (Lcom/idd/applicationtocall/MainActivity;) in Lcom/idd/applicationtolaunch/MainActivity;
08-26 15:23:39.927: D/dalvikvm(14122): VFY: replacing opcode 0x1c at 0x0002
08-26 15:23:39.957: I/PGA(14122): New SOCKET connection: icationtolaunch (pid 14122, tid 14122)

【问题讨论】:

  • 单击按钮后应用程序崩溃发布堆栈跟踪
  • 还没有。我去检查一下。谢谢你提醒我。
  • @user3793685 您是否在 xml 布局的按钮标记下添加了android:onClick="ClickMe"。也发布 logcat 异常。
  • 是的,我做到了。我已经添加了 logcat。

标签: java android


【解决方案1】:

在你的 OnClick 中使用这个:

public void ClickMe(View v) {
    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.idd.applicationtocall","com.idd.applicationtocall.MainActivity"));
    startActivity(intent);
}

以及ApplicationToCall的清单文件

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

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

您需要导出活动:

android:exported="true"

这样对我有用。

【讨论】:

  • ApplicationToLaunch 是第一个出现的表单。 ApplicationToCall 是我单击按钮后想要显示的表单。不应该像 Intent i=new Intent(this, com.idd.applicationtocall.MainActivity.class);因为我正在尝试启动 applicationtocall.MainActivity?
  • -这个应用程序对我来说非常好用。我不知道为什么它不适合你。我无法帮助你,因为我无法帮助自己。 xD
  • 还是不行。我之前也尝试过 setComponent 函数。我几乎尝试了 StackOverFlow 中的所有内容,但它似乎不起作用。我没有彻底检查的最后一件事是我的清单文件。
  • 是的。我尝试了 setComponent。它在第三条评论中。我知道该代码对你们有用。我也知道它应该对我有用。我已经为此工作了两个星期,但我仍然没有任何进展...... T-T
  • 我已经编辑过,现在对我有用。您忘记在 manifest.xml 中导出 ApplicationToCall 的活动
【解决方案2】:

您的 logcat 说找不到活动类。这可能是因为您没有将它添加到您的 AndroidManifest.xml 中。您应该添加标签

 <activity android:name="com.idd.applicationtocall.MainActivity"></activity>

到您的 ApplicationToLaunch AndroidManifest.xml。

【讨论】:

  • 我尝试在 下方添加 ,但它仍然崩溃。
【解决方案3】:

我设法使用以下代码显式启动另一个应用程序的启动器活动。我在 Stack Overflow 上找到了它,但我无法链接它,因为我不记得我在寻找什么来找到它。

        if (v.getId() == R.id.main_button)
        {
            android.content.pm.PackageManager mPm = getActivity().getPackageManager();
            PackageInfo info = null;
            try
            {
                info = mPm.getPackageInfo("com.example.other.app", 0);
            }
            catch (PackageManager.NameNotFoundException e)
            {
                Log.d(this.getClass().getSimpleName(), e.getMessage() + "does not exist", e);
            }
            Boolean isAppInstalled = info != null;
            Log.i(getClass().getSimpleName(), "The package was found: " + isAppInstalled);
        }
        else if(v.getId() == R.id.main_action_button)
        {
            Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage("com.example.other.app");
            startActivity(LaunchIntent);
        }

但是,如果您需要使用特定数据显式打开特定 Activity,那么您可能应该指定一个自定义操作,并尝试使用它来启动另一个应用程序。

Start Activity Using Custom Action

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多