-1

MyServices クラスでサービスを開始するチェック用のトグルボタンを作成しました... メイン レイアウト ファイルには 3 つのボタンがあり、2 番目のボタンをクリックすると UserStatus アクティビティが開始され、このアクティビティのトグルには startService() があると思います間に与えたトーストが表示されると、MyService を開始します。バックグラウンドで地理位置情報検出を行うつもりですが、地理位置情報が発生しない理由がわかりません。YouTube のビデオを使用して行いました。


これは UserStatus アクティビティです

package com.salesforce.samples.templateapp;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.location.*;
import android.content.Intent;
public class UserStatus extends Activity {

    ToggleButton statusToggle;

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_status);
        statusToggle=(ToggleButton)findViewById(R.id.toggleButton1);

        statusToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                if (isChecked)
                {
                    statusToggle.setTextOn("On");
                    Toast.makeText(getApplicationContext(), "Toggle is on", Toast.LENGTH_LONG).show();
                    startService(new Intent(getBaseContext(), MyServices.class));
                }
                else
                {
                    statusToggle.setTextOff("Off");
                    Toast.makeText(getApplicationContext(), "Toggle is off", Toast.LENGTH_LONG).show();
                    stopService(new Intent(getBaseContext(), MyServices.class));
                }
            }
        });
    }


    }

これは MyServices クラスです

package com.salesforce.samples.templateapp;

import java.util.HashMap;

import org.json.JSONArray;

import com.salesforce.androidsdk.app.ForceApp;
import com.salesforce.androidsdk.rest.RestClient;
import com.salesforce.androidsdk.rest.RestRequest;
import com.salesforce.androidsdk.rest.RestResponse;
import com.salesforce.androidsdk.rest.RestClient.AsyncRequestCallback;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class MyServices extends Service {
    RestClient client;
    double plat;
    double plong;
    int Two_Min=5*60*1000;

    // TextView infoText;

    public int onStartCommand(Intent intent, int flags, int startId) {

        Toast.makeText(this, "Location Updation has started", Toast.LENGTH_LONG)
                .show();
        detectLocation();
        return START_STICKY;

    }

    private void detectLocation() {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Inside detectlocation()", Toast.LENGTH_SHORT)
                .show();
        LocationManager lm1 = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener ll1 = new MyLocationListetner();
        Log.v("X",
                "Response:After creating lm and ll ");

        lm1.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, Two_Min, ll1);
        Log.v("X",
                "Response:After lm1.requestLocationUpdates ");
        ll1.onLocationChanged(null);
    }

    class MyLocationListetner implements LocationListener {

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            Log.v("X","Response:inside onLocationChanged ");
            Log.v("X","Response:"+location);
            if (location == null) {
                plat = location.getLatitude();
                plong = location.getLongitude();
                Log.v("X",
                        "Response:Location " + Double.toString(plat)+Double.toString(plong));

                String objectType = "akshayg__User__c";
                String objectId = "a02900000089fK3";
                HashMap<String, Object> fields = new HashMap<String, Object>();
                fields.put("Name", "Ashish");
                // fields.put("akshayg__Donor_Location__Latitude__s",
                // Double.toString(plat));
                // fields.put("akshayg__Donor_Location__Longitude__s",
                // Double.toString(plong));
                RestRequest request = null;

                try {
                    request = RestRequest.getRequestForUpdate(
                            getString(R.string.api_version), objectType,
                            objectId, fields);
                    // Toast.makeText(this, "Location Updation has started",
                    // Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    // printHeader("Could not build update request");
                    printException(e);
                    return;
                }

                client.sendAsync(request, new AsyncRequestCallback() {

                    @Override
                    public void onSuccess(RestRequest request,
                            RestResponse result) {

                        // Toast.makeText(this,
                        // ""+Double.toString(plat)+","+Double.toString(plong),
                        // Toast.LENGTH_LONG).show();

                        try {
                             //Toast.makeText(this, "Location Updated",Toast.LENGTH_LONG).show();

                            Log.v("X",
                                    "Response: " + result.toString());
                            /*JSONArray records = result.asJSONObject()
                                    .getJSONArray("records");
                            for (int i = 0; i < records.length(); i++) {
                                // listAdapter.add(records.getJSONObject(i).getString("Name"));
                                // listAdapter.add(records.getJSONObject(i).getString("akshayg__Phone_Number__c"));
                                // listAdapter.add(records.getJSONObject(i).getString("akshayg__Donor_Location__Latitude__s"));
                                // listAdapter.add(records.getJSONObject(i).getString("akshayg__Donor_Location__Longitude__s"));
                            }*/
                        } catch (Exception e) {
                            onError(e);
                        }
                    }

                    @Override
                    public void onError(Exception exception) {
                        Log.v("X",
                                "Response: " + exception.toString());

                        // Toast.makeText(MainActivity.this,
                        // MainActivity.this.getString(ForceApp.APP.getSalesforceR().stringGenericError(),
                        // exception.toString()),
                        // Toast.LENGTH_LONG).show();
                    }

                });
            }

        }

        private void printException(Exception e) {
            String err = "Error: " + e.getClass().getSimpleName();
            Toast.makeText(getApplicationContext(), err, Toast.LENGTH_LONG)
                    .show();
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub


        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

    }

    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Location Updation has stoped", Toast.LENGTH_LONG)
                .show();
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
}

ここに私のログ猫のエラーがあります..

04-02 23:01:33.375: E/AndroidRuntime(4779): FATAL EXCEPTION: main
04-02 23:01:33.375: E/AndroidRuntime(4779): java.lang.RuntimeException: Unable to start service com.salesforce.samples.templateapp.MyServices@413c8878 with Intent { cmp=com.salesforce.samples.templateapp/.MyServices }: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2403)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.app.ActivityThread.access$1900(ActivityThread.java:127)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1221)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.os.Looper.loop(Looper.java:137)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.app.ActivityThread.main(ActivityThread.java:4448)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at java.lang.reflect.Method.invokeNative(Native Method)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at java.lang.reflect.Method.invoke(Method.java:511)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at dalvik.system.NativeStart.main(Native Method)
04-02 23:01:33.375: E/AndroidRuntime(4779): Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.app.ContextImpl.startActivity(ContextImpl.java:877)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.content.ContextWrapper.startActivity(ContextWrapper.java:276)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at com.salesforce.samples.templateapp.MyServices.onStartCommand(MyServices.java:43)
04-02 23:01:33.375: E/AndroidRuntime(4779):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2386)

コントロールは onLocationChanged() の後に進みますが、if...else 条件には入りません。bcoz m サービス クラスから onLocationChanged().. に NULL を送信していますか? しかし、場所をチェックしても!=null 条件の場合、コントロールはまだ if ステートメントを通過しません..修正を提案してください...!!

4

1 に答える 1

0

Abhijit が言ったように、あなたが与えたエラーは、あなたのコードで発生した例外に対して Android によって常に表示されるエラーであるため、LogCat エラーを支援する方が簡単です。

推測する必要がある場合はUserStatus、マニフェストでアクティビティが宣言されていない可能性があります。

編集: ところで、テストするデバイスで GPS が有効になっていることを確認してください。Android 開発者の Web サイトで行う方法でプログラムで確認し、有効になっていない場合は場所の設定を開くことをお勧めします。ここでチェックしてください

于 2013-03-26T15:38:05.760 に答える