2015-01-16 2 views
1

Я хотел бы скрыть свое приложение Android от запуска, но иметь возможность вызвать его из другого приложения. Я теряюсь на том, что удалить из манифеста андроида.Как скрыть приложение для Android от пусковой установки

Уже попытался удалить ...

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

... но тогда он не открывается при вызове из другого приложения.

Вот что, как я называю эту скрытую

 Intent i; 
      PackageManager manager = getPackageManager(); 
      try { 
       i = manager.getLaunchIntentForPackage("org.xbmc.xbmc"); 
       if (i == null) 
        throw new PackageManager.NameNotFoundException(); 
       i.addCategory(Intent.CATEGORY_LAUNCHER); 
       startActivity(i); 

      } catch (PackageManager.NameNotFoundException e) { 

Вот вершина манифеста

xmlns:android="http://schemas.android.com/apk/res/android"> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.GET_TASKS" /> 
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:hasCode="true" android:debuggable="true"> 
    <activity android:theme="@*android:style/Theme.NoTitleBar.Fullscreen" android:name=".Splash" android:finishOnTaskLaunch="true" android:launchMode="singleInstance" android:screenOrientation="sensorLandscape" android:configChanges="touchscreen|keyboard|keyboardHidden|navigation|orientation"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter>     

ответ

5

Вы должны удалить следующую строку из вашего AndroidManifest.xml:

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

Это удалит приложение из пусковой установки по умолчанию. Тем не менее, вам также необходимо добавить следующую строку такой, что ваш BroadcastReceiver не полностью игнорируется:

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

Вы не должны удалить строку ниже - используется для указания Activity должен начать сначала, когда ваше приложение открыто:

<action android:name="android.intent.action.MAIN"/> 

EDIT

для того, чтобы запустить приложение, рассмотренную выше другого приложения, вы не можете использовать вызовы, указанные в вашем вопросе. Вы пытаетесь открыть приложение, создавая Intent с CATEGORY_LAUNCHER тегом (i.addCategory(Intent.CATEGORY_LAUNCHER)), когда вы явно удалили следующую строку из вашего AndroidManifest.xml файла:

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

Отсутствие выше линии означает, что приложения вы пытаетесь вызвать, будет игнорировать запуск Intent. Чтобы запустить приложение, вам нужно будет действовать еще на Intent. Ниже приведен пример, показывающий, как открыть приложение, которое не содержит фильтра намерений запуска, отвечая на SMS Intent: How to launch an Android app without "android.intent.category.LAUNCHER"

Какое намерение вы решите использовать, зависит только от вас - просто убедитесь, что вы добавили это ваш файл AndroidManifest.xml.

+0

не работает, приложение не открывается из другого приложения – cre8ful

+0

вы можете опубликовать весь файл 'AndroidManifest.xml'? Кроме того, как вы открываете это приложение из своего другого приложения? – Willis

+0

добавлен в мой первоначальный пост ^^^ – cre8ful

0

Попробуйте этот код:

PackageManager p = getPackageManager(); 
    p.setComponentEnabledSetting(getComponentName(), 
     PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
     PackageManager.DONT_KILL_APP); 

и проверить этот link.

надеюсь, что это поможет.

+1

Знаете ли вы, где добавить это? Я новичок в этом ... – cre8ful

Смежные вопросы