2015-11-22 3 views
0

Я пытаюсь выполнить пример given here при запуске некоторого кода с фиксированными временными интервалами. Я использовал код в этом примере (вместо этого установил время ожидания до 1 минуты), скомпилировал его, запустил на моем телефоне, остановил приложение на телефоне и подождал несколько минут.Пример диспетчера аварийных сообщений не работает

Однако, не было указано Toast и ни одна запись. Я также замечаю, что Service.onStart кажется обесценившимся.

Что-то не хватает в примере? Нужно ли мне что-то регистрировать при запуске основной активности приложения? Или позвонить ему из другого места в моем приложении? Или что-то не так в манифесте?

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mypackage.test" > 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <application> 
     android:allowBackup="true" 
     android:icon="@mipmap/stoxx" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/Theme.AppCompat.Light" > 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".NewEntryActivity" 
      android:label="@string/menu_add" 
      android:theme="@style/AppTheme.NoActionBar" 
     /> 
     <activity 
      android:name=".UserSettingActivity" 
      android:label="@string/menu_add" 
      android:theme="@style/AppTheme.NoActionBar" 
      /> 
     <receiver 
      android:process=":remote" 
      android:name=".Alarm"> 
     </receiver> 

    </application> 

</manifest> 
+0

Как вы остановили приложение? Какую версию Android вы используете? Btw, ваш первый тег '' закрывается преждевременно. –

+0

На телефоне есть кнопка, в которой говорится «Очистить все», и я полагаю, это остановить все запущенные приложения. Я обновил вопрос, надеясь, что правильный тег закрытия ... – Alex

+0

1) '>' идет после атрибута 'theme'. 2) Если вы имеете в виду «Закрыть все», то вы принудительно останавливаете приложение, и ваши тревоги будут очищены. 3) Если вы работаете в KitKat или выше, 'setRepeating()' больше не точен. Проверьте документы для ['AlarmManager'] (http://developer.android.com/intl/es/reference/android/app/AlarmManager.html). –

ответ

2

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

Вот мой манифест:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.alarmmanager.just_me.alarmmanager"> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 
<application android:allowBackup="true" android:label="@string/app_name" 
    android:icon="@mipmap/ic_launcher" android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:process=":remote" android:name=".Alarm"/> 
    <service android:name=".MyService"/> 
</application> 

Вот Alarm:

public class Alarm extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
    wl.acquire(); 

    // Put here YOUR code. 
    Toast.makeText(context, "com.alarmmanager.just_me.alarmmanager.Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

    wl.release(); 
} 

public void SetAlarm(Context context) 
{ 
    AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, Alarm.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 5, pi); // Millisec * Second 
} 

public void CancelAlarm(Context context) 
{ 
    Intent intent = new Intent(context, Alarm.class); 
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(sender); 
}} 

Вот сервис:

public class MyService extends Service 
{ 
    Alarm alarm = new Alarm(); 
    public void onCreate() 
    { 
     super.onCreate(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) 
    { 
     Log.d("!~!", "Service started."); 
     alarm.SetAlarm(this); 
     return START_STICKY; 
    } 

    @Override 
    public void onStart(Intent intent, int startId) 
    { 
     alarm.SetAlarm(this); 
    } 

    @Override 
    public IBinder onBind(Intent intent) 
    { 
     return null; 
    } 
} 

И последний MainActivity:

public class MainActivity extends Activity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Intent intent = new Intent(this, MyService.class); 
     startService(intent); 
    } 
} 
+0

Вместе с предложением от Майка, похоже, сработало! Большое спасибо!! – Alex

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