android - 无法在 android 中使用 AlarmManger 停止服务

标签 android

public class myserveclass extends Service {

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {

        Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();

    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

}

.

public class MainActivity extends ActionBarActivity {
    CheckinternetConnection internet;
    TextView textview;
    int tempint = 100;
    private static final long REPEAT_TIME = 1000 * 5;
    private PendingIntent pendingIntent;
    Button button1;
    Button button2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textview = (TextView) findViewById(R.id.textview);
        internet = new CheckinternetConnection();

        schedueService();

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(internet, filter);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        unregisterReceiver(internet);
    }

    class CheckinternetConnection extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            if (Utils.isNetworkAvailable(MainActivity.this)) {
                textview.setVisibility(View.GONE);

                startService(new Intent(getBaseContext(), myserveclass.class));

            } else {
                textview.setVisibility(View.VISIBLE);
                textview.setText("It Seems Internet Connection is off");
                stopService(new Intent(getBaseContext(), myserveclass.class));
            }
        }
    }

    public void schedueService() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 10);
        Intent intent = new Intent(MainActivity.this, myserveclass.class);
        PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0,
                intent, 0);
        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                1000 * 10, pintent);

    }

}

这是我用于启动服务和停止服务的代码当应用程序连接到互联网时能够启动服务并在互联网关闭时停止但是 10 秒后服务再次开始请检查我的问题哪里做错了我使用了警报马槽请检查请告诉我哪里做错了。

最佳答案

You need to CANCEL the alarm to stop the service

 Intent intent = new Intent(MainActivity.this, myserveclass.class);
 PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0,
                intent, 0);
 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
 alarmManager.cancel(pintent);

希望能帮到你

关于android - 无法在 android 中使用 AlarmManger 停止服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075401/

相关文章:

kotlin 中的 Android keystore

java - Facebook SDK 授权适用于手机,但不适用于平板电脑

android - 如何在 Android 中为 canvas drawrect 添加圆角?

android - Circular Reveal Android Compat With Design Library 28

android - 何时使用多个首选项文件?

安卓 : Right place to keep logic for view visibility

android - 从 Android Studio 停止 Android adb

android - 允许 NestedScrollView 在具有自定义行为的 BottomSheet 内完全滚动

android - 如何获取属于进程的所有页面的列表(linux)

android - 序列化/反序列化 & Proguard