代码之家  ›  专栏  ›  技术社区  ›  Sabari Karthik

如何在android中以编程方式开始接收器功能?

  •  0
  • Sabari Karthik  · 技术社区  · 12 年前

    我想以编程方式开始接收器类,我了解了如何以编程方式启动服务,以及以编程方式和接收器之间的区别。分享您的解决方案和想法。

    1 回复  |  直到 12 年前
        1
  •  0
  •   Sabari Karthik    12 年前

    如果您在服务中添加接收器并从活动中获取数据。我在下面添加活动和服务类。

    这是您从服务接收数据时的主要活动。

    public class YourActivity extends Activity {
    private MyReceiver receiver;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        LocalBroadcastManager manager = LocalBroadcastManager.getInstance(this);
        receiver = new MyReceiver();
        IntentFilter filter = new IntentFilter(YourServices.ACTION);
        manager.registerReceiver(receiver, filter);
    
        if (!YourServices.isRunning) {
            startService(new Intent(this, YourServices.class));
        }
    }
    
    class MyReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction() != null) {
        if (intent.getAction().equals(YourServices.ACTION)) {
        AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, MyServiceReceiver.class);
        PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,PendingIntent.FLAG_CANCEL_CURRENT);
        Calendar cal = Calendar.getInstance();
        // Start 20 seconds after boot completed
        cal.add(Calendar.SECOND, 20);
        Log.v("background service", "STARTED////\\");
    
        //
        // Fetch every 1 hour
        // InexactRepeating allows Android to optimize the energy consumption
        service.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                cal.getTimeInMillis(), REPEAT_TIME, pending);
                }
            }
        }
    }
    }
    

    这里是启动时发送数据的服务。

    public class YourServices extends Service {
    
    public static String ACTION = "your_action";
    public static boolean isRunning = true;
    
    private void broadcastData() {
        Intent intent = new Intent(ACTION);
        LocalBroadcastManager.getInstance(getApplicationContext())
                .sendBroadcast(intent);
    }
    
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        broadcastData();
        return START_STICKY;
    }
    }