待定意图无法运行服务

时间:2019-06-16 15:02:41

标签: java android android-intent android-service android-pendingintent

我试图使用过渡API来检测用户活动,所以我定义了一个挂起的意图并构建了一个服务以使其运行,但它并未运行。 另外,我不知道这是否重要,但是无论如何,该服务应该在检测到设备仍在运行时与我构建的服务器通信,但是如果我使用断点调试程序,则看起来好像没有甚至进入服务。

它仅在我编写pendingIntent.send()行时启动了服务,但由于该意图无论如何都没有收到任何数据,它仍然无济于事。

还定义了意图的onCreate方法:

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

    // Go fullscreen
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    mContext = this;
    activityRecognitionClient = ActivityRecognition.getClient(mContext);

    Intent intent = new Intent(this, TransitionIntentService.class);

    pendingIntent = PendingIntent.getService(this, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    configureSettingsButton();
}

活动检测版本:

public void registerHandler(final View view) {
    transitions = new ArrayList<>();

    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.STILL)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
            .build());

    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.STILL)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
            .build());

    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.IN_VEHICLE)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
            .build());

    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.IN_VEHICLE)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
            .build());

    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.WALKING)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
            .build());


    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.WALKING)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
            .build());


    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.RUNNING)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
            .build());

    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.RUNNING)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
            .build());


    ActivityTransitionRequest activityTransitionRequest = new ActivityTransitionRequest(transitions);

    Task<Void> task = activityRecognitionClient.requestActivityTransitionUpdates(activityTransitionRequest, pendingIntent);

    task.addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            textView = findViewById(R.id.textView4);
            scan = findViewById(R.id.startSearching);
            textView.setVisibility(View.VISIBLE);
            scan.setVisibility(View.INVISIBLE);
            Toast.makeText(mContext, "Started scanning", Toast.LENGTH_LONG).show();
        }
    });

    task.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(mContext, "Failed to build transition object", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
    });

}

服务本身:

public class TransitionIntentService extends IntentService {

String answer;
//boolean gotMatch = false;
boolean stopScanning = false;

public void onCreate() {
    super.onCreate();
    Log.d("TransitionIntentService", ">>>onCreate()");
}

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, startId, startId);
    Log.i("LocalService", "Received start id " + startId + ": " + intent);

    return START_STICKY;
}

@Override
protected void onHandleIntent(Intent intent) {
    if (null != intent) {
        if (ActivityTransitionResult.hasResult(intent)) {
            ActivityTransitionResult result = ActivityTransitionResult.extractResult(intent);
            for (ActivityTransitionEvent event : result.getTransitionEvents()) {

                if(event.getActivityType() == 3) //user is still
                {
                    if(event.getTransitionType() == 0) //the user has entered a still state
                    {
                        SendDriving sendDriving = new SendDriving();
                        sendDriving.start();

                        while (sendDriving.isAlive()){}

                        GetMatch getMatch = new GetMatch();
                        getMatch.start();
                    }
                    else if (event.getTransitionType() == 1) //the user has left the still state
                    {
                        stopScanning = true;

                        SendDrivingEnd sendDrivingEnd = new SendDrivingEnd();
                        sendDrivingEnd.start();
                    }
                }


            }
        }
    }
}

谢谢!

编辑:我的清单文件:

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:ignore="GoogleAppIndexingWarning">
    <activity android:name=".profile" />
    <activity android:name=".settingInterests" />
    <activity android:name=".languages" />
    <activity android:name=".settings" />
    <activity android:name=".Login" />

    <service android:name=".TransitionIntentService"></service>

    <activity android:name=".running" />
    <activity android:name=".SignupPage2" />
    <activity android:name=".SignupPage1" />
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

0 个答案:

没有答案