1

Я хочу передать arraylist в CheckRunningApplicationReceiver.class (широковещательный приемник) из моего MainActivity. CheckRunningApplicationReceiver.class вызывается из другого широковещательного приемника под названием StartupReceiver, который вызывается диспетчером аварийных сигналов каждые 5 секунд. Мне нужно сначала передать arraylist в StartupReceiver, а затем оттуда в CheckRunningApplicationReceiver? или может ли любой способ перейти непосредственно к CheckRunningApplicationReceiver из MainActivity?Как передать Arraylist из активности на широковещательный приемник другому приемнику вещания

StartupReceiver.class

public class StartupReceiver extends BroadcastReceiver { 

static final String TAG = "SR"; 

final int startupID = 1111111; 


@Override 
public void onReceive(Context context, Intent intent) { 

    // Create AlarmManager from System Services 
    final AlarmManager alarmManager = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 
    try{ 
      // Create pending intent for CheckRunningApplicationReceiver.class 
      // it will call after each 5 seconds 

      Intent i7 = new Intent(context, CheckRunningApplicationReceiver.class); 






      PendingIntent ServiceManagementIntent = PendingIntent.getBroadcast(context, 
        startupID, i7, 0); 
      alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
        SystemClock.elapsedRealtime(), 
        1000, ServiceManagementIntent); 


     } catch (Exception e) { 
      Log.i(TAG, "Exception : "+e); 
     } 

    } 

}

CheckRunningApplicationReceiver.class общественного класса CheckRunningApplicationReceiver расширяет BroadcastReceiver {

public final String TAG = "CRAR"; // CheckRunningApplicationReceiver 

Строка имя_пакета; DataManager ConnectivityManager;

@Override 
public void onReceive(Context aContext, Intent anIntent) { 


    dataManager = (ConnectivityManager)aContext.getSystemService(aContext.CONNECTIVITY_SERVICE); 
    Method dataMtd = null; 
    try { 
     dataMtd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class); 
    } catch (NoSuchMethodException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    dataMtd.setAccessible(true); 

    try { 

     // Using ACTIVITY_SERVICE with getSystemService(String) 
     // to retrieve a ActivityManager for interacting with the global system state. 

     ActivityManager am = (ActivityManager) aContext 
       .getSystemService(Context.ACTIVITY_SERVICE); 

     // Return a list of the tasks that are currently running, 
     // with the most recent being first and older ones after in order. 
     // Taken 1 inside getRunningTasks method means want to take only 
     // top activity from stack and forgot the olders. 

     List<ActivityManager.RunningTaskInfo> alltasks = am 
       .getRunningTasks(1); 




     // 
     for (ActivityManager.RunningTaskInfo aTask : alltasks) { 





        // When user on call screen show a alert message 





        if (aTask.topActivity.getClassName().equals("com.android.mms.ui.ConversationList") 
          || aTask.topActivity.getClassName().equals("com.android.mms.ui.ComposeMessageActivity")) 
        { 
         // When user on Send SMS screen show a alert message 
         try { 
          dataMtd.invoke(dataManager, false); 
         } catch (IllegalArgumentException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (IllegalAccessException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (InvocationTargetException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 







     } 

    } catch (Throwable t) { 
     Log.i(TAG, "Throwable caught: " 
        + t.getMessage(), t); 
    } 

} 

MainActivity.class

@Override 
protected void onResume() 
{ 
    // TODO Auto-generated method stub 
getBaseContext().getApplicationContext().sendBroadcast(
       new Intent("StartupReceiver_Manual_Start"));//to start StartupReceiver  

    super.onResume(); 
} 

Manifest

<uses-permission android:name="android.permission.GET_TASKS" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.javatechig.listapps.AllAppsActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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


     <activity 
     android:name="com.javatechig.listapps.Adblock" 
     android:label="@string/app_name" > 

    </activity> 


    <receiver android:name=".StartupReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="StartupReceiver_Manual_Start" /> 
     </intent-filter> 
    </receiver> 

    <receiver android:name = ".CheckRunningApplicationReceiver"/> 

    </application> 

ответ

0

что я сделал, пользователь выбирает конкретное приложение, поэтому я сохранил эти выбранные приложения в arraylist и сохранил его с использованием общих предпочтений. принимающий вещательный приемник запускается каждые 1 секунду с помощью диспетчера аварийных сигналов, который вызывает вызовы checkrunningapps. здесь я нашел хранимого arraylist и сравнил его с текущим передним приложением и делаю все, что хочу, например, блокировку приложения и прочее. но проблема заключается в том, что каждый раз он извлекает arraylist и проверяет его. из-за этого есть небольшое отставание в приложении. Я новичок в android. Я думаю, что мой метод неправильный. Я также пытался использовать сервис, но в команде onstart службы код выполняется только один раз, поэтому он проверяет текущее запущенное приложение с arraylist только один раз, даже если служба находится в фоновом режиме на неопределенный срок. plz скажите мне правильный подход к этому, используя фоновое обслуживание. PLZ пришлите мне код. Я hv искал много, но не повезло. Я хочу, чтобы служба извлекала arraylist только один раз и сравнивала его с текущим запущенным приложением навсегда.

0

Использование putParcelableArrayListExtra() поместить список в Intent и getParcelableArrayListExtra(), чтобы получить список из Intent.

Да, вам нужно будет передать это от Activity к первому BroadcastReceiver и может затем скопировать его из входящего Intent к исходящему Intent используется для запуска второй BroadcastReceiver.

+0

поблагодарить u за ответ, но я сохранил arraylist из основного действия с использованием общих настроек и сразу получил его от второго широковещательного приемника. –

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

  • Нет связанных вопросов^_^