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

如何在Android桌面上隐藏应用程序图标?

  •  3
  • anon  · 技术社区  · 14 年前

    我定义了一个只从其他应用程序中使用的应用程序。所以我想隐藏这个应用程序的图标,这样用户就不能在他的手机桌面上看到它了(或者你怎么称呼这个列出了所有应用程序的东西?)。我的清单文件如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="xyz.games.pacman.controller"
          android:versionCode="1"
          android:versionName="1.0">
    
          <uses-permission android:name="android.permission.BLUETOOTH"/>
    
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".PacmanGame"
                      android:label="@string/app_name"
                      android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="pacman.intent.action.Launch" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    
             <receiver android:name="xyz.games.pacman.network.MessageListener">
             <intent-filter>
                <action android:name="xyz.games.pacman.controller.BROADCAST" />
                </intent-filter>
             </receiver>
    
        </application>
        <uses-sdk android:minSdkVersion="7" />
    </manifest> 
    

    我已经读过这个问题:

    How to hide an application icon in Android emulator?

    但如果我把线移开

    <category android:name="android.intent.category.DEFAULT" />
    

    在我的清单中,活动根本不工作(调用活动中的ActivityNotFoundException)。

    有什么办法解决这个问题吗?我已经试过android.intent.category.EMBEDDED了,但这不太管用。

    http://osdir.com/ml/Android-Developers/2010-06/msg03617.html 可以使用PackageManager完成。不幸的是,它并没有解释到底如何,我无法通过浏览PackageManager API找到解决方案。

    4 回复  |  直到 7 年前
        1
  •  1
  •   Al Sutton    14 年前

    您需要创建一个自定义的意图过滤器,然后创建一个使用该过滤器的意图。

        <activity android:name="com.funkyandroid.banking.android.ExternalEntryActivity">
            <intent-filter>
                <action android:name="com.funkyandroid.action.NEW_TRANSACTION" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    

    Intent launchIntent = new Intent();
    launchIntent.setAction("com.funkyandroid.action.NEW_TRANSACTION");
    ... code to set parameters to be passed to activity ...
    startActivity(launchIntent);
    

    请特别注意setAction调用,它设置了正确的意图。

        2
  •  1
  •   xenonite    14 年前

        3
  •  1
  •   Gavriel    13 年前

    尝试移除意图过滤器,而不是尝试使用过滤器启动第二个活动,直接启动活动:

    Intent second = new Intent(context, xyz.games.pacman.controller.PacmanGame.class);
    startActivity(second);
    
        4
  •  0
  •   ognian    14 年前

    你必须把整个 <intent-filter> <category>