2013-12-24 3 views
2

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

Есть ли способ пробудить еще одно приложение без конкретной интеграции? возможно, пробуждение некоторых услуг в другом приложении?

** Проснувшись, я имею в виду, что другое приложение запускается, но явно не показывает какой-либо пользовательский интерфейс. Например, диктофон может проснуться и работать в фоновом режиме. Основной вид НЕ должен отображаться.

+0

Вы могли бы взглянуть на http://developer.android.com/guide/components/aidl.html . Не уверен, что это то, что вы ищете, ваш вопрос довольно широк. – Tobrun

+0

@ user1281750, почему, по-вашему, поможет файл помощи? –

+0

Не могли бы вы рассказать о том, что «другое приложение», «конкретная интеграция» и другие вещи, вы задаете слишком широкий вопрос, чтобы дать правильное решение. – Tobrun

ответ

0
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address"); 
startActivity(LaunchIntent); 
+1

Это откроет активность и, вероятно, какой-то вид. Я хотел бы, чтобы приложение было разбужено без вмешательства в интерфейс. –

+0

, если вы хотите, чтобы это приложение отображало какие-либо ui, тогда приложение-получатель не должно иметь основную активность и категорию-запуска в файле манифеста – anand

0
  1. Создание намерения с действием = MAIN и категории = LAUNCHER
  2. Получить PackageManager из текущего контекста с использованием context.getPackageManager
  3. packageManager.queryIntentActivity (< намерение>, 0), где умысел имеет категорию = LAUNCHER, action = MAIN или packageManager.resolveActivity (< умысел>, 0), чтобы получить первое действие с главной/пусковой установкой
  4. Получить ActivityInfo вы заинтересованы в
  5. От ActivityInfo, получить PACKAGENAME и имя
  6. Наконец, создайте еще один умысел с с категорией = гранатомет, действие = MAIN, ComponentName = новый ComponentName (PACKAGENAME, имя) и setFlags (Intent.FLAG_ACTIVITY_NEW_TASK)
  7. Наконец, context.startActivity (newIntent)

Или вы можете использовать:

Intent intent = new Intent("android.intent.action.MAIN"); 
intent.setComponent(ComponentName.unflattenFromString("com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks")); 
intent.addCategory("android.intent.category.LAUNCHER"); 
startActivity(intent); 
+0

, что было отрицательным для ??? –

+0

Это откроет активность и, вероятно, какой-то вид. Я хотел бы, чтобы приложение было разбужено без вмешательства в интерфейс. –

+0

Значит, вы имеете в виду, что у него вообще нет службы? ??? –

0

Это работает отлично податливость попробовать

PackageManager pm = getActivity().getPackageManager(); 
    Intent intent = pm.getLaunchIntentForPackage("package_name");//for e.g.(com.android.sms)//but this app must be in your device 

startActivity(intent); 
+0

Это откроет активность и, вероятно, какой-то вид. Я хотел бы, чтобы приложение было разбужено без вмешательства в интерфейс. –

+0

то вы должны знать, другое название приложения Service , а затем вы можете использовать этот частное булево isMyServiceRunning() { ActivityManager менеджера = (ActivityManager) getSystemService (ACTIVITY_SERVICE); для (RunningServiceInfo услуги: manager.getRunningServices (Integer.MAX_VALUE)) { если (.equals "com.example.MyService" (service.service.getClassName())) {// здесь вы можете запустить службу } } return false; } , где com.example.MyService - это сервисное имя приложения, которое вы хотите разбудить, надеюсь, что это работает, веселые chrismas :) – Amit

+0

Так как же может случиться просвещение? –

0

Если вы хотите отслеживать приложение, которое работает в фоновом режиме с вне вмешательства пользователя (в данном случае я предполагаю, что он использует услуги в фоновом режиме), мы можем отслеживать его с помощью следующего кода.

private boolean isOurServiceRunning(Context context) { 
      ActivityManager manager = (ActivityManager) context 
        .getSystemService(Context.ACTIVITY_SERVICE); 

      List<ActivityManager.RunningServiceInfo> listinfo = manager 
        .getRunningServices(Integer.MAX_VALUE); 

      Iterator<ActivityManager.RunningServiceInfo> iterator = listinfo 
        .iterator(); 

      while (iterator.hasNext()) { 

       ActivityManager.RunningServiceInfo info = iterator.next(); 


       if (info.service 
         .getClassName() 
         .equals("<your service with fullpackage name>")) 

        return true; 

      } 
      return false; 

     } 
+0

Спасибо , Как я могу разбудить его? –

+0

вы можете использовать широковещательные приемники для этого. –

+0

Как я понимаю, между вещательными приемниками и службами нет никакой связи. –

0

Достаточно отменить другое приложение из вашего кода.

Intent intent; 
      PackageManager manager = getPackageManager(); 
      try { 
       intent = manager.getLaunchIntentForPackage("com.mycompany.myapp"); 
       if (intent == null) 
        throw new PackageManager.NameNotFoundException(); 
       intent.addCategory(Intent.CATEGORY_LAUNCHER); 
       startActivity(intent); 
      } 
Смежные вопросы