代码之家  ›  专栏  ›  技术社区  ›  keyboardP

从我的应用程序启动外部应用程序

  •  5
  • keyboardP  · 技术社区  · 16 年前

    Intent intent = new Intent();
    intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
    startActivity(intent);
    

    但这似乎抛出了一个错误并强制关闭了我的应用程序。我还尝试添加:

    <action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/>
    

    在AndroidManifest文件中,但无效。

    看看Logcat,它是一个“IOexception-没有这样的文件或目录”。由此产生了几个问题。我通读了Android文档,注意到Contact.Intents类已被弃用。然而,它的继任者,ContactContracts的目标是API级别5,而我的目标是API级别3。这会是问题吗?此外,我已将此应用程序硬编码到代码中。是否有一种方法可以检索用户选择的任何应用程序的意图,以便启动它们?

    5 回复  |  直到 15 年前
        1
  •  7
  •   Christopher Orr    16 年前

    您需要将额外的信息传递到意图中,以告知Android ActivityNotFoundException .

    对于联系人,您使用通用的 Intent.ACTION_INSERT_OR_EDIT Contacts.People.CONTENT_ITEM_TYPE ).

    例如:

    Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
    intent.setType(People.CONTENT_ITEM_TYPE);
    intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");
    intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.PhonesColumns.TYPE_MOBILE);
    

    您不需要向清单中添加任何特殊内容来启动外部活动。只有当你要直接操纵触点时 ContentProvider 您是否需要向清单中添加相应的联系人权限。

        2
  •  1
  •   nCounTr    16 年前

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setClassName("com.android.settings", "com.android.settings.Settings"); 
    startActivity(intent);
    

    这将启动设置应用程序,您也可以使用这些:

    intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivityStarter");
    intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity");
    intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity");
    

    第一个启动默认音乐应用程序,第二个启动通讯录,第三个启动拨号程序。

        3
  •  0
  •   CaseyB    16 年前

        4
  •  0
  •   Daniel Benedykt    16 年前

    请尝试以下代码:

    意向意向=新意向(Contacts.Intents.SHOW\u或\u CREATE\u CONTACT);

    这一点。触觉(意图);

    并从清单中删除该操作。这是不必要的。 动作方法用于其他用途。 有关更多信息,请查看android网站: http://developer.android.com/reference/android/content/Intent.html

    丹尼尔

        5
  •  0
  •   Gangnus    15 年前

    您正在调用的活动不仅应该出现在其自身包的清单中,而且应该出现在调用包的清单中。