0

Ребята, у кого-нибудь есть ActivityrecognitionAPI для работы в Android. Он не дает никаких обновлений. Попробовали документы API, множество примеров. OnHandleIntent не срабатывает.Работает ли Android ActivityRecognitionApi, нет обновлений, полученных на onHandleIntent

import com.google.android.gms.location.ActivityRecognitionResult; 
import com.google.android.gms.location.DetectedActivity; 

import android.app.IntentService; 
import android.content.Intent; 
import android.support.v4.content.LocalBroadcastManager; 

public class ActivityRecognitionIntentService extends IntentService{ 

    ActivityRecognitionResult result; 
    Intent i; 
    DetectedActivity mpactivity; 

    public ActivityRecognitionIntentService() { 
     super("ActivityRecognitionIntentService"); 
     i = new Intent("ACTIVITY_RECOGNITION_DATA"); 
     } 

    private String getTypes(int type) { 
     if(type == DetectedActivity.UNKNOWN) 
      return "Unknown"; 
     else if(type == DetectedActivity.IN_VEHICLE) 
      return "In Vehicle"; 
     else if(type == DetectedActivity.ON_BICYCLE) 
      return "On Bicycle"; 
     else if(type == DetectedActivity.RUNNING) 
      return "Running"; 
     else if(type == DetectedActivity.ON_FOOT) 
      return "On Foot"; 
     else if(type == DetectedActivity.STILL) 
      return "Still"; 
     else if(type == DetectedActivity.TILTING) 
      return "Tilting"; 
     else if(type == DetectedActivity.WALKING) 
      return "Walking"; 
     else 
      return ""; 
     } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     if (intent.getAction() == "ActivityRecognitionIntentService") { 
      if(ActivityRecognitionResult.hasResult(intent)){  
       result = ActivityRecognitionResult.extractResult(intent); 
       mpactivity = result.getMostProbableActivity(); 
       i.putExtra("Activity", getTypes(mpactivity.getType())); 
       i.putExtra("Confidence", mpactivity.getConfidence()); 
       LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); 
       } 
      } 
     } 
    }  

Главная деятельность как

 import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesClient; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.ActivityRecognition; 

import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.content.LocalBroadcastManager; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Actrecogex extends Activity implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{ 

    TextView textView1; 
    GoogleApiClient mGoogleActclient; 
    PendingIntent mActivityRecognitionPendingIntent; 
    Intent i; 
    LocalBroadcastManager mBroadcastManager; 

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

     textView1 = new TextView(this); 
     textView1 =(TextView)findViewById(R.id.textView1); 

     i = new Intent(this, ActivityRecognitionIntentService.class); 
     mBroadcastManager = LocalBroadcastManager.getInstance(this); 

     mGoogleActclient = new GoogleApiClient.Builder(this) 
     .addApi(ActivityRecognition.API) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .build(); 

     mGoogleActclient.connect(); 
     } 

    @Override 
    public void onConnectionFailed(ConnectionResult arg0) { 
     textView1.setText("Failed Connection" + arg0); 
     } 

    @Override 
    public void onConnected(Bundle arg0) { 
     i.setAction("ActivityRecognitionIntentService"); 
     mActivityRecognitionPendingIntent = PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
     ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleActclient, 0, mActivityRecognitionPendingIntent); 
     } 

    @Override 
    public void onConnectionSuspended(int arg0) { 
     textView1.setText("Failed Suspended" + arg0); 
     } 

    private BroadcastReceiver receiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(getApplicationContext(), "Service", Toast.LENGTH_SHORT).show(); 
      String v = "Activity :" + intent.getStringExtra("Activity") + " " + "Confidence : " + intent.getExtras().getInt("Confidence") + "\n"; 
      v += textView1.getText() ; 
      textView1.setText(v); 
      } 
     }; 

    @Override 
    public void onDisconnected() { 
     textView1.setText("Disconnected"); 
     } 
    } 

Manifest

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="21" /> 
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/> 

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

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

    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> 
    <service android:name="ActivityRecognitionIntentService" android:exported="false"></service> 
</application> 

ли код действительно работает, или я трачу время. Серьезно захотите вернуться к работе Activityrecognitionclient. Тестирование приложения на прянике и киткате. Оба не сдвинулись с места

+0

Теперь обнаружено, что проблема возникает из ActivityRecognitionResult является виновником. Теперь можно получить сообщение об ошибке. Таким образом, onHandleIntent пинает, но бросает ошибку. – Ravi

+0

Я получаю сообщение об ошибке для Forceclose периодически в пряниках, но не в Kitkat. Периодическое сообщение об ошибке, которое я рассматриваю, - это обратная связь активности с сервисом. – Ravi

ответ

0
if (intent.getAction() == "ActivityRecognitionIntentService") { 
} 

Был дает нулевое значение. Итак, периодическое сообщение об ошибке.

Основная проблема заключалась в том, что Broadcastreceiver ничего не получал. Поэтому необходим отдельный класс для Broadcastreceiver. Он работает сейчас.

<receiver android:name="ActBreceiver" android:exported="false"> 
      <intent-filter> 
       <action android:name="ACTIVITY_RECOGNITION_DATA"/> 
      </intent-filter> 
     </receiver> 
0

Похоже, что ваше определение службы в манифесте неверно: отсутствует лидирующий период. Он должен быть

<service android:name=".ActivityRecognitionIntentService" android:exported="false"></service> 

Ваш onHandleIntent() использует

intent.getAction() == "ActivityRecognitionIntentService" 

Но вы не можете сравнивать строки с == так что ваш if заявление никогда не возвращает истину. Вместо этого, вы должны использовать equals() или эквивалентный TextUtils.equals() (который также обрабатывает случаи, когда один из аргументов null):

"ActivityRecognitionIntentService".equals(intent.getAction()) 
// OR 
TextUtils.equals(intent.getAction(), "ActivityRecognitionIntentService") 
+0

Спасибо за указание, что. Проблема заключается в том, что OnHandleIntent никогда не вызывается. Изменен на equals(), тот же результат – Ravi

+0

Обновлен мой ответ: похоже, необходимо также исправить ваше определение службы объявлений. – ianhanniballake

+0

Добавлен ведущий период .ActivityRecognitionIntentService No Difference, те же проблемы – Ravi

 Смежные вопросы

  • Нет связанных вопросов^_^