【问题标题】:how to put a shortcut of an activity into the launcher?如何将活动的快捷方式放入启动器?
【发布时间】:2011-12-23 21:29:27
【问题描述】:

我正在尝试做一些在下一个链接中简要描述的事情:

link

意思是,我有一个甚至可以在另一个应用程序上的活动(但现在让我们专注于我的应用程序拥有的一个活动),我希望能够为它创建一个快捷方式。

对于术语,假设创建快捷方式的活动名为“ShortcutCreatorActivity”,启动的活动是“MyActivity”。

我从所写的内容中得到的是 ShortcutCreatorActivity 应该在清单中定义为:

<activity android:icon="@drawable/ic_launcher"
  android:label="ShortcutActivity" android:name="com.my_app.ShortcutCreatorActivity">
  <intent-filter>
    <action android:name="android.intent.action.CREATE_SHORTCUT" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

我在它的java代码中得到的是:

public class ShortcutCreatorActivity extends Activity
  {
  @Override
  protected void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    final Intent shortcutIntent=new Intent("com.my_app.MyActivity");
    final ShortcutIconResource iconResource=Intent.ShortcutIconResource.fromContext(this,R.drawable.ic_launcher);
    final Intent intent=new Intent();
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,shortcutIntent);
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"Shortcut Test");
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,iconResource);
    setResult(RESULT_OK,intent);
    Toast.makeText(this,"shortcut created",Toast.LENGTH_SHORT).show();
    finish();
    }
  }

然而,当我点击快捷方式和日志时,我一直收到“找不到应用程序”的相同消息:

ActivityManager(232): Starting: Intent { act=com.my_app.MyActivity flg=0x10200000 bnds=[80,150][160,250] } from pid 3956

谁能帮帮我?缺什么? 我还为清单中的 MyActivity 活动尝试了一些意图过滤器。没有任何帮助...


@liro 我认为这并不重要,因为我已经指定了类的确切完整路径,包括包名。


大家好,如果你有一个可行的项目,那就完美了。

【问题讨论】:

  • 你的应用包名是什么?除了 ShortcutCreatorActivity 还有其他类吗?

标签: android android-activity shortcut launcher


【解决方案1】:

这里不确定,但我认为您需要从“com.MyActivity”中删除“com”。

<activity android:icon="@drawable/ic_launcher"
  android:label="ShortcutActivity" android:name=".ShortcutCreatorActivity">
   <intent-filter>
    <action android:name="android.intent.action.CREATE_SHORTCUT" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

【讨论】:

  • 不,你错了。有多种方法可以为活动设置“android:name”标签。这 ”。”一开始只是从应用程序包本身获得前缀的快捷方式。你可以做到,你可以像我一样指定它。两者都应该工作。
【解决方案2】:

代替

final Intent shortcutIntent=new Intent("com.my_app.MyActivity");

试试

final Intent shortcutIntent=new Intent(this, com.my_app.MyActivity.class);

或在该活动的意图过滤器中定义您的操作,我相信您可能没有这样做。

这两个链接可能会有所帮助: http://developer.android.com/reference/android/content/Intent.html#Intent(java.lang.String) http://developer.android.com/guide/topics/manifest/action-element.html

【讨论】:

  • 这很奇怪。我很确定我已经检查过了(顺便说一句,你忘了把“.class”放在第二个参数上)。有效。谢谢。
  • 很高兴我能帮上忙。我也修复了它的答案。
  • 我认为它有效,但它只适用于普通项目。当我使用图书馆项目时,它没有。在我的场景中,我有一个库项目,其中包含 MyActivity 和 ShortcutCreatorActivity 类,而启动器活动位于使用库项目的普通项目中。我确实有包含正确活动路径的清单,但我不断收到“找不到应用程序”。
  • 现在我明白了:我缺少属性 android:exported="true" 。想知道为什么会这样,因为图书馆现在应该是整个应用程序的一部分,所以它也应该可以使用。谁能解释一下?这很奇怪,因为在使用库项目的简单项目中已经可以访问 MyActivity 类(例如,通过使用“startActivity”。
  • 顺便说一句,实现它的另一种方法是使用shortcutIntent.setComponent(new ComponentName(packageName,fullPathToActivity));
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
相关资源
最近更新 更多