2017-02-02 2 views
1

Je souhaite ajouter Admob à un projet. Dans la principale classe java je ne pouvais pas trouver la méthode onCreate() pour ajouter le ADview et AdRequest afin d'initialiser le SDK Google Mobile AdsImpossible de trouver la méthode onCreate()

package ***************** 

import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.OpenableColumns; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.Toast; 

import com.github.barteksc.pdfviewer.PDFView; 
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener; 
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener; 
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle; 
import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 
import com.google.android.gms.ads.MobileAds; 
import com.shockwave.pdfium.PdfDocument; 

import org.androidannotations.annotations.AfterViews; 
import org.androidannotations.annotations.EActivity; 
import org.androidannotations.annotations.NonConfigurationInstance; 
import org.androidannotations.annotations.OnActivityResult; 
import org.androidannotations.annotations.OptionsItem; 
import org.androidannotations.annotations.OptionsMenu; 
import org.androidannotations.annotations.ViewById; 

import java.util.List; 

@EActivity(R.layout.activity_main) 
@OptionsMenu(R.menu.options) 

public class PDFViewActivity extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener { 

    private static final String TAG = PDFViewActivity.class.getSimpleName(); 

    private final static int REQUEST_CODE = 42; 
    public static final int PERMISSION_CODE = 42042; 

    public static final String SAMPLE_FILE = "sample.pdf"; 
    public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE"; 


    @ViewById 
    PDFView pdfView; 

    @NonConfigurationInstance 
    Uri uri; 

    @NonConfigurationInstance 
    Integer pageNumber = 0; 

    String pdfFileName; 

    @OptionsItem(R.id.pickFile) 
    void pickFile() { 
     int permissionCheck = ContextCompat.checkSelfPermission(this, 
       READ_EXTERNAL_STORAGE); 

     if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(
        this, 
        new String[]{READ_EXTERNAL_STORAGE}, 
        PERMISSION_CODE 
      ); 

      return; 
     } 

     launchPicker(); 
    } 

    void launchPicker() { 
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
     intent.setType("application/pdf"); 
     try { 
      startActivityForResult(intent, REQUEST_CODE); 
     } catch (ActivityNotFoundException e) { 
      //alert user that file manager not working 
      Toast.makeText(this, R.string.toast_pick_file_error, Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @AfterViews 
    void afterViews() { 
     if (uri != null) { 
      displayFromUri(uri); 
     } else { 
      displayFromAsset(SAMPLE_FILE); 
     } 
     setTitle(pdfFileName); 
    } 

    private void displayFromAsset(String assetFileName) { 
     pdfFileName = assetFileName; 

     pdfView.fromAsset(SAMPLE_FILE) 
       .defaultPage(pageNumber) 
       .onPageChange(this) 
       .enableAnnotationRendering(true) 
       .onLoad(this) 
       .scrollHandle(new DefaultScrollHandle(this)) 
       .load(); 
    } 

    private void displayFromUri(Uri uri) { 
     pdfFileName = getFileName(uri); 

     pdfView.fromUri(uri) 
       .defaultPage(pageNumber) 
       .onPageChange(this) 
       .enableAnnotationRendering(true) 
       .onLoad(this) 
       .scrollHandle(new DefaultScrollHandle(this)) 
       .load(); 
    } 

    @OnActivityResult(REQUEST_CODE) 
    public void onResult(int resultCode, Intent intent) { 
     if (resultCode == RESULT_OK) { 
      uri = intent.getData(); 
      displayFromUri(uri); 
     } 
    } 

    @Override 
    public void onPageChanged(int page, int pageCount) { 
     pageNumber = page; 
     setTitle(String.format("%s %s/%s", pdfFileName, page + 1, pageCount)); 
    } 

    public String getFileName(Uri uri) { 
     String result = null; 
     if (uri.getScheme().equals("content")) { 
      Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
      try { 
       if (cursor != null && cursor.moveToFirst()) { 
        result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); 
       } 
      } finally { 
       if (cursor != null) { 
        cursor.close(); 
       } 
      } 
     } 
     if (result == null) { 
      result = uri.getLastPathSegment(); 
     } 
     return result; 
    } 

    @Override 
    public void loadComplete(int nbPages) { 
     PdfDocument.Meta meta = pdfView.getDocumentMeta(); 
     Log.e(TAG, "title = " + meta.getTitle()); 
     Log.e(TAG, "author = " + meta.getAuthor()); 
     Log.e(TAG, "subject = " + meta.getSubject()); 
     Log.e(TAG, "keywords = " + meta.getKeywords()); 
     Log.e(TAG, "creator = " + meta.getCreator()); 
     Log.e(TAG, "producer = " + meta.getProducer()); 
     Log.e(TAG, "creationDate = " + meta.getCreationDate()); 
     Log.e(TAG, "modDate = " + meta.getModDate()); 

     printBookmarksTree(pdfView.getTableOfContents(), "-"); 

    } 

    public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) { 
     for (PdfDocument.Bookmark b : tree) { 

      Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx())); 

      if (b.hasChildren()) { 
       printBookmarksTree(b.getChildren(), sep + "-"); 
      } 
     } 
    } 

    /** 
    * Listener for response to user permission request 
    * 
    * @param requestCode Check that permission request code matches 
    * @param permissions Permissions that requested 
    * @param grantResults Whether permissions granted 
    */ 
    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], 
              @NonNull int[] grantResults) { 
     if (requestCode == PERMISSION_CODE) { 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       launchPicker(); 
      } 
     } 
    } 
} 

Edit: problème résolu il suffit d'ajouter les @Afterviews d'appel comme celui-ci

@AfterViews 
void afterViews() { 
    if (uri != null) { 
     displayFromUri(uri); 
    } else { 
     displayFromAsset(SAMPLE_FILE); 
    } 
    setTitle(pdfFileName); 

    MobileAds.initialize(getApplicationContext(), "app-id"); 

    AdView mAdView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
} 

PS Je suis nouveau à la programmation.

+1

Vous devez créer la méthode 'onCreate'. Vous devriez étudier plus sur le Framework Android (spécialement Activity Lifecycle) avant de commencer avec les autres fonctionnalités comme AdMob. –

+0

J'ai essayé d'ajouter la méthode, l'application se bloque au lancement –

+1

Pouvez-vous poster le logcat montré lorsque l'application se bloque? –

Répondre

1

Tout d'abord, je vous recommande de jeter un oeil à la documentation Activity Lifecycle. S'il n'y a pas de méthode onCreate() dans le code que vous avez fourni, vous devrez ajouter la méthode vous-même. L'éthique de pourquoi vous modifier un produit sous licence Apache 2.0 pour insérer uniquement annonces de côté, dans votre cas, il serait

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Super.onCreate(savedInstanceState); 
    MobileAds.initialize(getApplicationContext(), "app-id"); 

    AdView mAdView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
} 

Notez également que le code fourni dans cette activité fait un usage intensif de Android Annotations, je Je vous conseille de passer un peu de temps à vous familiariser avec un peu plus de code vanilla avant de passer aux librairies qui vous font gagner du temps.

+0

J'ai essayé d'ajouter la méthode, l'application se bloque au lancement. \t J'ai remarqué aussi qu'il y a une activité générée qui contient la méthode (j'ai ajouté le code ci-dessus), mais je ne peux pas l'éditer car elle est générée –

+0

Dans ce cas, pouvez-vous éditer votre question originale pour inclure le logcat qui est produit lorsque l'application se bloque? –

+0

okay, logcat ajouté –

1

Problème résolu, il suffit de mettre en @Afterviews comme ceci:

@AfterViews 
void afterViews() { 
if (uri != null) { 
    displayFromUri(uri); 
} else { 
    displayFromAsset(SAMPLE_FILE); 
} 
setTitle(pdfFileName); 

MobileAds.initialize(getApplicationContext(), "app-id"); 

AdView mAdView = (AdView) findViewById(R.id.adView); 
AdRequest adRequest = new AdRequest.Builder().build(); 
mAdView.loadAd(adRequest); 
}