2014-11-09 2 views
2

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

моя активность:

public class FirstClass extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.first); 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() 
    { 
     public void run() 
     { 
     startService(new Intent(getApplicationContext(), MyService.class)); 
     startActivity(new Intent(FirstClass.this, MainActivity.class)); 
     finish(); 
     } 
    },5000); 
    } 
///////////////////////////////////////////////// 
} 

мой радиовещательный приемник:

public class BroadcastReceiverOnTurnedOn extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Intent startServiceIntent = new Intent(context, MyService.class); 
    context.startService(startServiceIntent); 
    } 
} 

я добавил:

<service 
    android:name="com.dariran.MyService" 
    android:enabled="true" 
    android:exported="true" > 
</service> 
<receiver android:name="com.dariran.BroadcastReceiverOnTurnedOn" 
android:enabled="true"> 
    <intent-filter android:priority="1"> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
    <intent-filter> 
    <action android:name="android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" /> 
    </intent-filter> 
</receiver> 

к тегу применения на Manifest.xml и я добавил этот код в мой класс обслуживания, чтобы поставить фильтр, чтобы распознать внешний накопитель, но не работать снова :(

@Override 
public void onStart(Intent intent, int startId) { 
try { 

IntentFilter filter = new IntentFilter(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); 
filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); 
BroadcastReceiver mReceiver = new BroadcastReceiverOnTurnedOn(); 
registerReceiver(mReceiver, filter); 

} catch (Exception e) { 
} 
} 
+0

Вы имеете в виду «« заставить приложение не может быть перенесено на SD-карту? –

+0

Что вы имеете в виду? пожалуйста, помогите мне, потому что я пытаюсь решить эту проблему около 7 дней :( –

+0

Что вы подразумеваете под «просто запускаете на внутреннем хранилище»? –

ответ

1

Цитирование the documentation:

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

радиоприемников прослушивание для «загрузки завершенного»
система обеспечивает ACTION_BOOT_COMPLE TED до того, как внешнее хранилище будет установлено на устройство. Если ваше приложение установлено во внешнем хранилище, оно никогда не сможет получить эту трансляцию.

Цитирование в другом месте в the documentation, this time for ACTION_EXTERNAL_APPLICATIONS_AVAILABLE:

Дополнительное EXTRA_CHANGED_UID_LIST данных содержит список пакетов жидкостей наличия которых изменились. Обратите внимание, что пакеты в этом списке не получают эту трансляцию.

Следовательно, вам необходимо настроить приложение, чтобы оно не было установлено на внешнем хранилище.

+0

я видел похожие программы, которые были установлены на внешнем хранилище и были активны при перезагрузке устройства (их служба) –

+0

@soheila: услуги, которые вы запускаете во время загрузки , с планом по их запуску навсегда, являются анти-шаблонами на Android.Таким образом, я бы рекомендовал вместо этого сосредоточиться на устранении необходимости запуска службы во время загрузки. Также, пожалуйста, поймите, что несколько устройств предлагают установку на внешние больше, поскольку большинство устройств Android 3.0+ больше не нужны. – CommonsWare

+0

теперь, что я должен сделать, чтобы иметь это приложение? –

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