隐藏应用程序图标并运行它

时间:2014-09-30 20:08:52

标签: android android-intent android-activity

我需要隐藏应用程序图标 然后用拨号盘运行程序 示例:* 12345#

我无法运行隐藏的程序。

隐藏应用程序:

PackageManager p = getPackageManager();
            ComponentName componentName = new ComponentName(this, com.example.broadcastreciver.MainActivity.class); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" />
            p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);


运行MainActivity:

Intent appIntent = new Intent(context, Blank.class);
            appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           context.startActivity(appIntent);



这是AndroidManifest.xml

    <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" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <receiver android:name=".IncomingSms" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>

        <activity
            android:name=".Blank"
            android:label="@string/title_activity_blank" >
        </activity>
    </application>

2 个答案:

答案 0 :(得分:5)

如果禁用该活动,则无法启动。您实际要做的是禁用或删除活动上的<intent-filter>。不幸的是,无法删除甚至检查明显的意图过滤器(参见this bug)。

您可以做的是定义具有<intent-filter> s的<activity-alias>,并启用/禁用此组件。禁用活动别名后,您仍然可以使用隐式意图启动目标活动,但应用程序不应出现在启动器中,因为禁用的组件是具有action.MAIN和category.LAUNCHER意图过滤器的组件。

答案 1 :(得分:1)

最后我发现了一种替代方式 问题解决了 我已经创建了一个intent-filter

的AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
<!-- Here is Launcher -->
            </intent-filter>
        </activity>
        <receiver android:name=".IncomingSms" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>

        <activity

            android:name=".Blank"
            android:label="@string/title_activity_blank" >
<intent-filter>
     <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
        </activity>
    </application>



隐藏应用程序图标

ComponentName componentToDisable =
                  new ComponentName("com.example.broadcastreciver",
                  "com.example.broadcastreciver.MainActivity");
                getPackageManager().setComponentEnabledSetting(
                  componentToDisable,
                  PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                  PackageManager.DONT_KILL_APP);



和启动应用程序:

String phoneNubmer = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        if (LAUNCHER_NUMBER.equals(phoneNubmer)) {
            setResultData(null);
            Intent appIntent = new Intent(context, Blank.class);
            appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           context.startActivity(appIntent);
        } 


我隐藏了我的MainActivity
我为第二个活动创建了一个Intent过滤器 通过USSD代码运行应用程序(例如:* 123456#等)
我打了第二个活动(空白)