2017-08-06 4 views
-2

Je développe une application appareil photo Android, cela fonctionne correctement mais quand je l'exécute dans Android 7, il crée un message qui dit "L'application est arrêtée"! Je pense que le problème est de ce fichier de mon code, il est mon dossier galerie:Mon application Android ne fonctionne pas sur Android 7

public class Gallery extends Activity { 

GridView gv; 
ArrayList<File> list; 
Context context; 
private static VirtualFileSystem vfs; 

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


    File f = new File("/myfiles.db"); 

    list = imageReader(f); 

    gv = (GridView) findViewById(R.id.gridview); 
    gv.setAdapter(new GridAdapter()); 

    gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      startActivity(new Intent(getApplicationContext(), viewImage.class).putExtra("img", list.get(position).toString())); 
     } 
    }); 
} 


class GridAdapter extends BaseAdapter { 
    public ImageView iv; 
    public Bitmap bmp = null; 
    public File file ; 
    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 


    class ViewHolder { 

     ImageView icon; 

    } 


    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     Log.e("sara" , "this part takes time"); 


     LayoutInflater inflater = getLayoutInflater(); 
     getLayoutInflater().inflate(R.layout.gallery_gridsq, parent, false); 

     convertView = getLayoutInflater().inflate(R.layout.gallery_gridsq, parent, false); 
     iv = (ImageView) convertView.findViewById(R.id.icon); 
     file = new File(Uri.parse(getItem(position).toString()).getPath()); 
     new myTask(iv, file).execute(); 

     return convertView; 
    } 


    private class myTask extends AsyncTask <Void , Void ,Bitmap> { 
     ImageView iv; 
     File file; 

     public myTask(ImageView iv, File file) { 
      this.iv=iv; 
      this.file= file; 
     } 



     @Override 
     protected Bitmap doInBackground(Void... params) { 

      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inJustDecodeBounds = true; 
      try { 
       BitmapFactory.decodeStream(new FileInputStream(file), null, options); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

      options.inJustDecodeBounds = false; 
      options.inSampleSize = 2; 
      try { 
       bmp = BitmapFactory.decodeStream(new FileInputStream(file), null, options); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      return bmp; 
     } 


     @Override 
     protected void onPostExecute(Bitmap aVoid) { 

      iv.setImageBitmap(aVoid); 
     } 
    } 
} 


ArrayList<File> imageReader (File root) { 

    final ArrayList<File> a = new ArrayList<>(); 

    File[] files = root.listFiles(); 


    for (int i = files.length - 1; i >= 0; i--) { 


     if (files[i].isDirectory()) { 
      // input name directory to array list 
      a.addAll(imageReader(files[i])); 
     } else { 
      if (files[i].getName().endsWith(".jpg")) { 
       a.add(files[i]); 
      } 
     } 
    } 
    return a; 
} 

Dans ce lien, il utilise « getUriForFile » mais je pense qu'il ne peut pas me aider dans ce cas! Voici ma logcat:

08-07 02: 10: 21.757 2343-2343 /? E/memtrack: Impossible de charger le module memtrack (aucun fichier ou répertoire de ce type) 08-07 02: 10: 21.757 2343-2343 /? E/android.os.Debug: échec du chargement du module memtrack: -2 08-07 02: 10: 21.913 2349-2349 /? E/memtrack: Impossible de charger le module memtrack (No tel fichier ou répertoire) 08-07 02: 10: 21.913 2349-2349 /? E/android.os.Debug: échec du chargement du module memtrack: -2 08-07 02: 10: 22.220 2370-2370 /? E/cutils-trace: Erreur lors de l'ouverture du fichier de trace: Autorisation refusée (13) 08-07 02: 10: 23.334 2390-2390 /? E/memtrack: Impossible de charger le module memtrack (aucun fichier ou répertoire de ce type) 08-07 02: 10: 23.334 2390-2390 /? E/android.os.Debug: impossible de charger memtrack Module : -2 08-07 02: 10: 23.708 2399-2415 /? E/libEGL: load_driver (/system/lib/egl/libGLES_emulation.so): échec de dlopen: bibliothèque "/system/lib/egl/libGLES_emulation.so" introuvable 08-07 02: 10: 23.802 2399-2399 /? E/AndroidRuntime: EXCEPTION FATAL: principal processus: com.example.zeinab.amndoorbin, PID: 2399 java.lang.NullPointerException: annuler() appelée avec une valeur nulle PendingIntent à android.app.AlarmManager.cancel (AlarmManager. java: 890) à info.guardianproject.cacheword.CacheWordService.resetTimeout (CacheWordService.java:189) à info.guardianproject.cacheword.CacheWordService.attachSubscriber (CacheWordService.java:145) à info.guardianproject.cacheword.CacheWordHandler 2 $ .onServiceConnected (CacheWordHandler.java:457) at android.app.LoadedApk $ ServiceDispatcher.doConnected (LoadedApk.java:1453) at android.app.LoadedApk $ Se rviceDispatcher $ RunConnection.run (LoadedApk.java:1481) à android.os.Handler.handleCallback (Handler.java:751) à android.os.Handler.dispatchMessage (Handler.java:95) at android.os. Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6119) à java.lang.reflect.Method.invoke (Méthode native) à com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) à com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) 08-07 02: 10: 25.520 2399-2415 /? E/EGL_emulation: tid 2415: eglSurfaceAttrib (1174): erreur 0x3009 (EGL_BAD_MATCH) 08-07 02: 10: 25.612 706-1732 /? E/EGL_emulation: tid 1732: eglSurfaceAttrib (1174): Erreur 0x3009 (EGL_BAD_MATCH)

+1

https://developer.android.com/about/versions/nougat/android-7.0 -changes.html # partage-fichiers –

+0

Voir ceci: https://stackoverflow.com/a/38858040/7746134 –

+2

S'il vous plaît expliquer, ** en détail **, ce que "ça ne marche pas" signifie. – CommonsWare

Répondre

1

Je pense que vous devez changer la configuration de votre application. changer l'API cible dans la structure du projet à l'API 25. consultez ce lien

Pour vous aider

0

Après M android (api-23), vous devriez demander l'utilisateur d'accepter l'autorisation requise. vous pouvez le faire en ouvrant une boîte de dialogue.voici un exemple de code:

ActivityCompat.requestPermissions(yourActivity.this, 
       new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
       1); 

et vous pouvez obtenir le résultat de la demande d'autorisation par le code ci-dessous:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults){ 
    switch (requestCode) { 
     case 1: { 

     // If request is cancelled, the result arrays are empty. 
     if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      // permission was granted, 
      // contacts-related task you need to do.   
     } else { 

      // permission denied 
      // functionality that depends on this permission. 
      Toast.makeText(yourActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show(); 
     } 
     return; 
    } 

    // other 'case' lines to check for other 
    // permissions this app might request 
    } 
} 
+0

Je l'ai fait dans ma première page! – zeinab

+0

mettre à jour votre question avec Error Logs @zeinab –