2015-05-04 80 views
-3

嘿那里我试图每隔15分钟使用alaram管理器运行android后台服务,但我无法做到这一点我不会发生什么错误,我不知道什么是错的在我的代码它不工作android报警管理器每15分钟运行一次后台服务

尝试{

 //Create a new PendingIntent and add it to the AlarmManager 
     Intent intent = new Intent(this, RingAlarm.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 
      12345, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     AlarmManager am = 
      (AlarmManager)getSystemService(Activity.ALARM_SERVICE); 
     am.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 
       3000,pendingIntent); 

     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 

     } 




RingAlaram.class 
public class RingAlarm extends Service { 
     public void onCreate() { 
        Toast.makeText(getApplicationContext(), "hi there", Toast.LENGTH_LONG).show(); 
       } 

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



} 

和最后我的清单

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.alarmmanagerexample.AlarmManagerExample" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
      <service 
      android:name=".RingAlarm" 
      android:exported="false" /> 
    </application> 
+1

设置标志PendingIntent.FLAG_UPDATE_CURRENT –

+0

@ AC-开放源代码还是它不工作 –

+0

尝试以下 –

回答

2

您应该使用getService代替getActivity并传递应用程序上下文(getApplicationContext)而不是活动上下文(this)。

//Create a new PendingIntent and add it to the AlarmManager 
    Intent intent = new Intent(getApplicationContext(), RingAlarm.class); 
    PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 12345, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE); 
    am.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 3000, pendingIntent); 

RingAlaram.class

public class RingAlarm extends Service { 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(getApplicationContext(), "hi there", Toast.LENGTH_LONG).show(); 
    } 

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

还设置标志PendingIntent.FLAG_UPDATE_CURRENT而不是取消清单 和设置服务声明<packagename>.RingAlarm可能是com.example.alarmmanagerexample.RingAlarm你的情况(我不知道你的项目结构体)。

+0

这不是正确的答案,但服务代码不会以这种方式编译。您必须从onStartCommand()方法返回Service.START_NOT_STICKY或START_STICKY或START_STICKY_COMPATIBILITY。 在这种情况下,Service.START_NOT_STICKY会有意义 –

1

变化getActivity到的getService

Intent intent = new Intent(this, RingAlarm.class); 
     PendingIntent pendingIntent = PendingIntent.getService(this, 
      12345, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     AlarmManager am = 
      (AlarmManager)getSystemService(Activity.ALARM_SERVICE); 
     am.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 
       3000,pendingIntent); 

     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 

     } 
相关问题