0

Я разрабатываю приложение для Android, которое работает как индикатор батареи, открытое действие при низком или полном разряде батареи.Активность открывается несколько раз с помощью широковещательного приемника

Он отлично работает, когда я нахожу финиш() в Основной деятельности из onCreate event после запуска службы.

, но когда я комментирую закончить метод, он открывает активность несколько раз, которую я открываю из приемника BroadCast.

Вот MainActivity Код:

public class Main extends Activity { 
private MyService service; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

if (service == null) { 

    Intent i = new Intent(this, MyService.class); 
    startService(i); 
} 

finish(); 
}} 

Вот мой код услуги: Я думаю, что я делаю что-то неправильно, когда я начинаю активность. В строке

getApplication().startActivity(intent); 

Complete Service Code является:

public class MyService extends Service{ 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d("MyService", "onStartCommand"); 
    // do not receive all available system information (it is a filter!) 
    final IntentFilter battChangeFilter = new IntentFilter(
      Intent.ACTION_BATTERY_CHANGED); 
    // register our receiver 
    this.registerReceiver(this.batteryChangeReceiver, battChangeFilter); 
    return super.onStartCommand(intent, flags, startId); 
} 
private final BroadcastReceiver batteryChangeReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     checkBatteryLevel(intent); 
    } 
}; 

private void checkBatteryLevel(Intent batteryChangeIntent) { 
    // some calculations 
    final int currLevel = batteryChangeIntent.getIntExtra(
      BatteryManager.EXTRA_LEVEL, -1); 
    final int maxLevel = batteryChangeIntent.getIntExtra(
      BatteryManager.EXTRA_SCALE, -1); 
    final int percentage = (int) Math.round((currLevel * 100.0)/maxLevel); 

    if(percentage==100) 
    { 
     Intent intent = new Intent(getBaseContext(), Last.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     getApplication().startActivity(intent); 

    } 
    if(percentage==15) 
    { 
     Intent intent = new Intent(getBaseContext(), Last.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     getApplication().startActivity(intent); 

    } 
    }} 

И это мой последний "Last.cs" деятельность, которая открывает несколько раз. , но он отлично работает, когда я вызываю финиш() в главную активность.

public class Last extends Activity { 
Button btnCancel; 
Uri notification; 
Ringtone r; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_last); 

notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); 
r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
r.play(); 


btnCancel = (Button) findViewById(R.id.stopsound); 

btnCancel.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     r.stop(); 
    } 
}); 

} } 
+0

Слишком много кода. Опубликовать только необходимые части –

+0

Вы можете реализовать широковещательный приемник в своей деятельности, зачем использовать сервис для реализации широковещательной передачи – Pankaj

+0

@Clairvoyant, если я закрываю активность или приложение, то как я могу получать трансляцию? – user1999284

ответ

2

Сделайте свой Последняя активность launchMode в singleTask в манифесте

<activity 
     android:name=".Last" 
     android:configChanges="orientation|screenSize" 
     android:launchMode="singleTask" 
     > 
    </activity> 
+0

Если этот ответ поможет вам избежать создания нескольких видов деятельности. Пожалуйста, примите его в качестве ответа, он может быть полезен для тех, кто сталкивается с одной и той же проблемой. – Srinivasan

+0

, но почему он работает, когда я нахожу финиш на основной деятельности? – user1999284

+0

есть проблема в getApplication(). StartActivity (намерение); в служебном коде ??? – user1999284

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