Search code examples
androidandroid-intentandroid-serviceandroid-intentservice

Android Service won't start from MainActivity


I am attempting to start MainService from MainActivity. However, I never see a log printout confirming the service's creation.

Am I supposed to use onCreate, onStartCommand, or onHandleIntent? I have tried all three and nothing has worked.

MainActivity:

package hcii.tracker;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import com.aware.Aware;
import com.aware.Aware_Preferences;


public class MainActivity extends ActionBarActivity {

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

        Log.d("ACTVITY", "ACT created!");

        Context context = this;
        //MainService main = new MainService();
        //main.startService();

        //Intent i= new Intent(context, MainService.class);
        //context.startService(i);

        Intent mServiceIntent = new Intent(this, MainService.class);
        this.startService(mServiceIntent);

       //Context context = this;
        //Aware.startPlugin(context, "com.aware.plugin.google.activity_recognition");

        //startService(new Intent(this, MainService.class));


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

MainService:

package hcii.tracker;

import android.app.IntentService;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import com.aware.Aware;
import com.aware.Aware_Preferences;

/**s
 * Created by Connor on 6/25/2015.
 */
public class MainService extends IntentService {

    public MainService(){
        super("MainService");
    }

   /*public void onCreate(){

        Log.d("SERVICE", "Service created!");

        Context context = this;
        //Activate Accelerometer
        Aware.setSetting(this, Aware_Preferences.STATUS_ACCELEROMETER, true);
        //Set sampling frequency
        Aware.setSetting(this, Aware_Preferences.FREQUENCY_ACCELEROMETER, 200000);
        //Apply settings
        sendBroadcast(new Intent(Aware.ACTION_AWARE_REFRESH));
        //Aware.startPlugin(getApplicationContext(), "com.aware.plugin.google.activity_recognition");
        Aware.startPlugin(context, "com.aware.plugin.google.activity_recognition");
    }*/

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

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d("SERVICE", "Handle");

        Context context = this;
        //Activate Accelerometer
        Aware.setSetting(this, Aware_Preferences.STATUS_ACCELEROMETER, true);
        //Set sampling frequency
        Aware.setSetting(this, Aware_Preferences.FREQUENCY_ACCELEROMETER, 200000);
        //Apply settings
        sendBroadcast(new Intent(Aware.ACTION_AWARE_REFRESH));
        //Aware.startPlugin(getApplicationContext(), "com.aware.plugin.google.activity_recognition");
        Aware.startPlugin(context, "com.aware.plugin.google.activity_recognition");
    }

    /*@Override
    public int onStartCommand(Intent intent, int i, int u) {
        Log.d("SERVICE", "Start command");

        Context context = this;
        //Activate Accelerometer
        Aware.setSetting(this, Aware_Preferences.STATUS_ACCELEROMETER, true);
        //Set sampling frequency
        Aware.setSetting(this, Aware_Preferences.FREQUENCY_ACCELEROMETER, 200000);
        //Apply settings
        sendBroadcast(new Intent(Aware.ACTION_AWARE_REFRESH));
        //Aware.startPlugin(getApplicationContext(), "com.aware.plugin.google.activity_recognition");
        Aware.startPlugin(context, "com.aware.plugin.google.activity_recognition");
        return 0;
    }*/
}

Manifest file:

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        tools:replace="android:icon, android:theme">
        <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>
        <Service
            android:name=".MainService"
            android:exported="false"/>

        <provider
            android:name="com.aware.providers.Bluetooth_Provider"
            android:authorities="${applicationId}.provider.bluetooth"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Applications_Provider"
            android:authorities="${applicationId}.provider.applications"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Locations_Provider"
            android:authorities="${applicationId}.provider.locations"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Installations_Provider"
            android:authorities="${applicationId}.provider.installations"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.ESM_Provider"
            android:authorities="${applicationId}.provider.esm"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Temperature_Provider"
            android:authorities="${applicationId}.provider.temperature"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Linear_Accelerometer_Provider"
            android:authorities="${applicationId}.provider.accelerometer.linear"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Gravity_Provider"
            android:authorities="${applicationId}.provider.gravity"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Barometer_Provider"
            android:authorities="${applicationId}.provider.barometer"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Magnetometer_Provider"
            android:authorities="${applicationId}.provider.magnetometer"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Proximity_Provider"
            android:authorities="${applicationId}.provider.proximity"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Light_Provider"
            android:authorities="${applicationId}.provider.light"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Telephony_Provider"
            android:authorities="${applicationId}.provider.telephony"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Aware_Provider"
            android:authorities="${applicationId}.provider.aware"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Rotation_Provider"
            android:authorities="${applicationId}.provider.rotation"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.WiFi_Provider"
            android:authorities="${applicationId}.provider.wifi"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Accelerometer_Provider"
            android:authorities="${applicationId}.provider.accelerometer"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Gyroscope_Provider"
            android:authorities="${applicationId}.provider.gyroscope"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Traffic_Provider"
            android:authorities="${applicationId}.provider.traffic"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Mqtt_Provider"
            android:authorities="${applicationId}.provider.mqtt"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Processor_Provider"
            android:authorities="${applicationId}.provider.processor"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.TimeZone_Provider"
            android:authorities="${applicationId}.provider.timezone"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Battery_Provider"
            android:authorities="${applicationId}.provider.battery"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Screen_Provider"
            android:authorities="${applicationId}.provider.screen"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Network_Provider"
            android:authorities="${applicationId}.provider.network"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Communication_Provider"
            android:authorities="${applicationId}.provider.communication"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
        <provider
            android:name="com.aware.providers.Keyboard_Provider"
            android:authorities="${applicationId}.provider.keyboard"
            android:exported="true"
            android:readPermission="com.aware.READ_CONTEXT_DATA"
            android:writePermission="com.aware.WRITE_CONTEXT_DATA"
            >
        </provider>
    </application>

</manifest>

Solution

  • The guide to background services can be found at https://developer.android.com/training/run-background-service/create-service.html.

    You will use the startService method in your main activity and this will call onHandleIntent.

    It looks like the way you have it is correct. However, in your manifest <service... should be lowercase.