2014-09-30 65 views
3

我需要隐藏应用程序图标。
和运行的拨号
示例程序:* 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> 
+0

请显示您的AndroidManifest.xml – Karakuri 2014-09-30 21:26:51

+0

请再次检查。 – Mahdi 2014-10-01 05:50:33

回答

1

终于让我找到一种替代方法
,问题就解决了
我创建了一个意向过滤器

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
我已经创建了第二个活动
一个意向过滤器运行通过USSD应用代码(例如:* 123456#等)
我叫第二个活动(空白)

+0

您应该编辑原始帖子,而不是将其发布为答案。 – Karakuri 2014-10-01 14:40:34

+0

好的,tnx回答 – Mahdi 2014-10-02 05:43:08

4

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

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

+0

这适用于API 23以前的版本。我在运行API 23的两款不同手机上进行了测试,并在12秒后关闭应用程序,但未完全关闭,因为我的应用程序具有蓝牙连接,在应用程序关闭后不会关闭。任何解决方法? – pigswig 2017-02-22 20:47:51

+0

@pigswig这只影响图标是否出现在应用程序启动器中。它与“关闭”一项活动无关(我甚至不确定你在这里的“关闭”是什么意思)。 – Karakuri 2017-02-22 20:54:05

+0

“闭幕”并不是单词的最佳选择。我有一个复选框,显示“隐藏图标”的活动。一旦用户检查它,大约12秒钟后,活动就会消失,就像主页按钮被按下一样。这发生在我的Nexus 6和Moto G3上,都在API 23上。此外,logcat也会重复显示:proc activity list中的ActivityManager:Wtf,Activity ActivityRecord {d8828a9 u0 com.abc/.MainActivityAlias t6826 f}不使用proc ProcessRecord {944a36a 31088 :com.abc/u0a170}?!?使用null替代.' – pigswig 2017-02-22 21:18:08

相关问题