User Tools

Site Tools


android_learning:headfirst_android_development_notes:chapter_13

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
android_learning:headfirst_android_development_notes:chapter_13 [2016/04/30 02:52] – [pp. 562-563: Code block] mithatandroid_learning:headfirst_android_development_notes:chapter_13 [2016/05/07 06:04] (current) – [p. 553] mithat
Line 1: Line 1:
 ====== Chapter 13 ====== ====== Chapter 13 ======
  
-<WRAP center round info 60%> +<WRAP center round important 60%> 
-Under development.+If you read nothing else here, you should check out the section on [[#permissions]].
 </WRAP> </WRAP>
  
Line 44: Line 44:
  
 ===== p. 550: Code block ===== ===== p. 550: Code block =====
-<code>+<code java>
     public void onClick(View view) {     public void onClick(View view) {
         Intent intent = new Intent(this, DelayedMessageService.class);         Intent intent = new Intent(this, DelayedMessageService.class);
Line 55: Line 55:
 ===== p. 553 ===== ===== p. 553 =====
  
-In other words, while most Intent methods run off the main thread, but onStartCommand() runs on the main thread.+In other words, while most IntentService methods run off the main thread, but ''onStartCommand()'' runs on the main thread.
  
 ===== p. 554 ===== ===== p. 554 =====
Line 245: Line 245:
 ===== Permissions? ===== ===== Permissions? =====
  
-You will probably see some editor rage even after you add the needed permissions to //AndroidManifest.xml//. The autofix will suggest "Add Permission Check." This is because the way Android handles permissions has [[https://developer.android.com/training/permissions/requesting.html|changed in Android 6.0 (API level 23)]]. Instead of the permissions being asked to be granted at install time, they are asked at run time.+You will probably continue to see editor rage even after you add the location services permissions to //AndroidManifest.xml//. The autofix will suggest that you "Add Permission Check." This is because permission handling has [[https://developer.android.com/training/permissions/requesting.html|changed in Android 6.0 (API level 23)]]. Instead of the permissions being asked for at install time, they are now asked at run time.
  
 > If the device is running Android 5.1 or lower, **or** your app's target SDK is 22 or lower: If you list a dangerous permission in your manifest, the user has to grant the permission when they install the app; if they do not grant the permission, the system does not install the app at all. > If the device is running Android 5.1 or lower, **or** your app's target SDK is 22 or lower: If you list a dangerous permission in your manifest, the user has to grant the permission when they install the app; if they do not grant the permission, the system does not install the app at all.
Line 273: Line 273:
  
 The IDE will tell you that the project needs to be synced, which you should do. And for good measure, from the menu bar, do a //Build > Clean Project//. The IDE will tell you that the project needs to be synced, which you should do. And for good measure, from the menu bar, do a //Build > Clean Project//.
 +
 +===== Code block =====
 +<file java MainActivity.java>
 +package com.hfad.odometer;
 +
 +import android.app.Activity;
 +import android.content.ComponentName;
 +import android.content.Context;
 +import android.content.Intent;
 +import android.content.ServiceConnection;
 +import android.os.Bundle;
 +import android.os.Handler;
 +import android.os.IBinder;
 +import android.widget.TextView;
 +
 +public class MainActivity extends Activity {
 +
 +    private OdometerService odometer;
 +    private boolean bound = false;
 +
 +    private ServiceConnection connection = new ServiceConnection() {
 +        @Override
 +        public void onServiceConnected(ComponentName componentName, IBinder binder) {
 +            OdometerService.OdometerBinder odometerBinder =
 +                    (OdometerService.OdometerBinder) binder;
 +            odometer = odometerBinder.getOdometer();
 +            bound = true;
 +        }
 +        @Override
 +        public void onServiceDisconnected(ComponentName componentName) {
 +            bound = false;
 +        }
 +    };
 +
 +    @Override
 +    protected void onCreate(Bundle savedInstanceState) {
 +        super.onCreate(savedInstanceState);
 +        setContentView(R.layout.activity_main);
 +        watchMileage();
 +    }
 +
 +    @Override
 +    protected void onStart() {
 +        super.onStart();
 +        Intent intent = new Intent(this, OdometerService.class);
 +        bindService(intent, connection, Context.BIND_AUTO_CREATE);
 +    }
 +
 +    @Override
 +    protected void onStop() {
 +        super.onStop();
 +        if (bound) {
 +            unbindService(connection);
 +            bound = false;
 +        }
 +    }
 +
 +    private void watchMileage() {
 +        final TextView distanceView = (TextView)findViewById(R.id.distance);
 +        final Handler handler = new Handler();
 +        handler.post(new Runnable() {
 +            @Override
 +            public void run() {
 +                double distance = 0.0;
 +                if (odometer != null) {
 +                    distance = odometer.getMiles();
 +                }
 +                String distanceStr = String.format("%1$,.2f miles", distance);
 +                distanceView.setText(distanceStr);
 +                handler.postDelayed(this, 1000);
 +            }
 +        });
 +    }
 +}
 +</file>
  
android_learning/headfirst_android_development_notes/chapter_13.1461984770.txt.gz · Last modified: 2016/04/30 02:52 by mithat

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki