2

以下是我通過Gmail應用程序發送電子郵件的方式。通過意向發送電子郵件:SecurityException

 Intent emailIntent = new Intent(Intent.ACTION_SEND); 
     emailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); 
     emailIntent.setType("text/html"); 
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Puzzle"); 
     emailIntent.putExtra(Intent.EXTRA_TEXT, someTextHere)); 
     emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(attachmentFile)); 
     try { 
      startActivityForResult(emailIntent, SHARE_PUZZLE_REQUEST_CODE); 
     } catch (ActivityNotFoundException e) { 
      showToast("No application found on this device to perform share action"); 
     } catch (Exception e) { 
      showToast(e.getMessage()); 
      e.printStackTrace(); 
     } 

這不是開始的Gmail應用程序,但顯示以下信息。

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.SEND typ=text/html cmp=com.google.android.gm/.ComposeActivityGmail (has extras) } from ProcessRecord{8293c64 26854:com.xxx.puzzleapp/u0a383} (pid=26854, uid=10383) not exported from uid 10083 

上有SOF對此一些問題,其中大部分是建議使用出口=真。但是當我啓動另一個應用程序的活動時,我無法使用此解決方案。你能指導我嗎?

+2

類名(com.google.android.gm.ComposeActivityGmail)最近被改變。請檢查並提供適當的類名。否則,您可以直接給emailIntent.setPackage(「com.google.android.gm」)而不是emailIntent.setClassName; – Rajasekhar

+0

@Rajasekhar越來越android.content.ActivityNotFoundException:未發現處理意圖的活動{act = android.intent.action.VIEW typ = text/plain pkg = com.google.android.gm(有額外功能)} –

回答

13

試試這個

 Intent emailIntent = new Intent(Intent.ACTION_SEND); 
     emailIntent.setType("text/html"); 
     final PackageManager pm = this.getPackageManager(); 
     final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0); 
     String className = null; 
     for (final ResolveInfo info : matches) { 
      if (info.activityInfo.packageName.equals("com.google.android.gm")) { 
       className = info.activityInfo.name; 

       if(className != null && !className.isEmpty()){ 
        break; 
       } 
      } 
     } 
     emailIntent.setClassName("com.google.android.gm", className); 
2

我想Rajasekhar是對的。在具有與傳統的應用程序相同的問題我的情況,我已經看了G中網站上的參考代碼,並使用類似這樣的東西:

public void composeEmail(String[] addresses, String subject) { 
    Intent intent = new Intent(Intent.ACTION_SENDTO); 
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this 
    intent.putExtra(Intent.EXTRA_EMAIL, addresses); 
    intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    if (intent.resolveActivity(getPackageManager()) != null) { 
        startActivity(intent); 
    } 
} 

而且它沒有問題的工作。

PS:在我的情況下,我沒有問題的應用程序選擇器給用戶。它的工作原理與每一個版本的Gmail,相同的代碼是你的,打破了應用程序在Gmail中的v6.10.23

+0

這適用於我。謝謝! – Swapnil