2017-02-09 103 views
1

我試圖在按下分享按鈕時從其他應用程序接收數據。應用程序顯示在選擇器中,當我按下應用程序時,它會打開,但我無法獲得文本!intent.getAction()和intent.getType()返回null

這是我的啓動畫面,如果它有任何意義。

Cover.java

public class Cover extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    startActivity(new Intent(Cover.this,MainActivity.class)); 
    this.finish(); 
} 
} 

MainActivity.java

onCreate(...) 
setContentView(....) 
Intent intent = getIntent(); 
    String action = intent.getAction(); 
    String type = intent.getType(); 
    Log.d("nikesh"," "+action); //this prints null 
    Log.d("nikesh"," "+type); //this prints null 
    if (Intent.ACTION_SEND.equals(action) && type != null) { 
     if ("text/plain".equals(type)) { 
      handleSendText(intent); 
     } 
    } 


    private void handleSendText(Intent intent) { 
    String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); 
    Log.d("khee",sharedText);  //these are 
    if (sharedText != null) {  //not printed 
     Log.d("khee",sharedText); 
textView.setText(sharedText); 
     // Update UI to reflect text being shared 
    } 
} 

的manifest.xml

<intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="text/plain" /> 
</intent-filter> 
+0

intent.getIntent()返回null?也許在方法名稱中有一個錯字?你的意思是intent.getType? –

+0

@RobertEstivill對不起,這是getType(); –

+0

Docs令人驚訝的幫助:https://developer.android.com/reference/android/content/Intent.html#getType() –

回答

0

您所使用的明確意圖,這並沒有得到由系統和解決IntentFilters。

startActivity(new Intent(Cover.this, MainActivity.class)); 

如果你仍然想使用類開始活動,你將不得不調用setAction on the Intent.

Intent intent = new Intent(Cover.this,MainActivity.class); 
intent.setAction("android.intent.action.SEND"); 
startActivity(intent); 

或無視明確的部分,以及剛剛成立的動作

Intent intent = new Intent(); 
intent.setAction("android.intent.action.SEND"); 
startActivity(intent); 
+0

雅,我做了你所說的,現在,馬getAction()值爲android.intent.action.SEND但getType()返回null –

+0

因爲你需要通過調用setType '。顯式意圖不設置默認值。閱讀下面的答案,以瞭解顯式和隱式意圖之間的區別http://stackoverflow.com/questions/2914881/android-implicit-intents-vs-explicit-intents –

+0

我傳intent.setType(「text/plain」);這是正確的價值嗎?我沒有得到共享文本:( –

0

我在啓動畫面中做了這個。 txt是這裏的關鍵。

Intent intent = new Intent(Cover.this,MainActivity.class); 
    intent.setAction("android.intent.action.SEND"); 
    intent.setType("text/plain"); 
    intent.putExtra("txt",getIntent().getStringExtra(Intent.EXTRA_TEXT)); 
    startActivity(intent); 
    this.finish(); 

MainActivity.java

Intent intent = getActivity().getIntent(); 
    String action = intent.getAction(); 
    String type = intent.getType(); 

    if (Intent.ACTION_SEND.equals(action) && type != null) { 
     if ("text/plain".equals(type)) { 
      handleSendText(intent); 
     } 
    } 


    } 
    public void handleSendText(Intent intent) { 
    String sharedText = getActivity().getIntent().getExtras().getString("txt"); 
    if (sharedText != null) { 
     textView.setText(sharedText); 
    } 
} 

謝謝你這麼多@Robert Estivill讓我發現問題!