应用程序崩溃重新启动手机

时间:2012-08-01 06:11:45

标签: android

以下是我的Android应用的代码。 MainActivity.java

public class MainActivity extends Activity {

    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds

    protected LocationManager locationManager;

    protected Button retrieveLocationButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("MyTag", "first");
        retrieveLocationButton = (Button) findViewById(R.id.button1);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 
                MINIMUM_TIME_BETWEEN_UPDATES, 
                MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
                new MyLocationListener()
        );

    retrieveLocationButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                showCurrentLocation();
                Log.d("MyTag", "Second");
            }
    });        

    }    

    protected void showCurrentLocation() {

        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        Log.d("MyTag", "Third"+location);
        if (location != null) {
            String message = String.format(
                    "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );
            Toast.makeText(MainActivity.this, message,
                    Toast.LENGTH_LONG).show();
            Log.d("MyTag", "Fifth");
        }

    }   

    private class MyLocationListener implements LocationListener {

        public void onLocationChanged(Location location) {
            String message = String.format(
                    "New Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );
            Log.d("MyTag", "sixth");
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
        }

        public void onStatusChanged(String s, int i, Bundle b) {
            Toast.makeText(MainActivity.this, "Provider status changed",
                    Toast.LENGTH_LONG).show();
        }

        public void onProviderDisabled(String s) {
            Toast.makeText(MainActivity.this,
                    "Provider disabled by the user. GPS turned off",
                    Toast.LENGTH_LONG).show();
        }

        public void onProviderEnabled(String s) {
            Toast.makeText(MainActivity.this,
                    "Provider enabled by the user. GPS turned on",
                    Toast.LENGTH_LONG).show();
        }

    }

}

BootReceiver.java

public class BootReceiver extends BroadcastReceiver     {
    @Override
    public void onReceive(Context context, Intent intent){
        context.startService(new Intent(context,MainActivity.class));
        Log.d("kkkkkkkk","bootReceive");
    }
}

AndroidMainfest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pragmatic.pragmaticgps"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />       
        <uses-permission android:name="android.permission.INTERNET" />     
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 <uses-permission android:name="android.permission.REBOOT"/> 

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

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

         <receiver
           android:name=".receiver..MainActivity"
           android:enabled="true" >
           <intent-filter>
               <action android:name="android.intent.action.REBOOT" />
           </intent-filter>
       </receiver>


        <receiver android:name=".BootReceiver">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver> 


    </application>

</manifest>

我希望这个应用程序获得GPS坐标,即纬度/经度并通过吐司显示它(它确实如此。)我还希望每当重新启动移动设备时,此应用程序应自动启动并在24x7全天候运行但在真实状态下运行Android手机,当我打开手机,应用程序崩溃和弹出出现要求强制关闭它。代码有什么问题?很抱歉直接询问错误,但我对Android了解不多 谢谢。

1 个答案:

答案 0 :(得分:2)

感觉就像这里的错误一样:

context.startService(new Intent(context,MainActivity.class));

您可以将MainActivity作为Service启动,因为它不是Service,而是Activity。要开始Activity,您应该致电

context.startActivity(new Intent(context,MainActivity.class))

此外,在这种情况下,最好将MainActivity组织为Service,因为直接从Activity开始BroadcastReceiver是个不错的主意。希望这会有所帮助。