从其他应用程序接收数据在android中为空

时间:2015-07-15 05:36:56

标签: android android-intent android-activity

  

我想让我的应用程序像Instagram一样可以分享图片   直接从我的应用程序,如果我从中选择任何图像   画廊和点击共享我的应用程序显示在选择器列表

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


<activity
                android:name=".ui.activities.SplashActivity"
                android:label="@string/app_name"
                android:launchMode="singleTop"
                android:screenOrientation="sensorPortrait"
                android:windowSoftInputMode="adjustResize" >
                <intent-filter>
                    <action android:name="android.intent.action.SEND" />

                    <category android:name="android.intent.category.DEFAULT" />

                    <data android:mimeType="*/*" />
                </intent-filter>

                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    </activity>

从意图接收数据的代码是

private void initActivityState() {
        if (getIntent() != null){
            runShareActivityIntent();
        }
}
public void runShareActivityIntent(){
        Intent passIntent=getIntent();
        String action = passIntent.getAction();
        String type = passIntent.getType();

        if (Intent.ACTION_SEND.equals(action) && type != null) {
            Uri imageUri = (Uri) passIntent.getParcelableExtra(Intent.EXTRA_STREAM);    
            Intent intentcall = new Intent(this, MainActivity.class);
            intentcall.putExtra(KEY_TYPE,type);
            intentcall.putExtra(KEY_VALUE,imageUri.toString());
            startActivity(intentcall);
            finish();
        }

    }

现在,在我的情况下,当我的应用程序处于后台时,我能够获得

String type = passIntent.getType();
  

我可以获得图像uri但是当我的应用程序没有运行时(杀死应用程序)和我   从选择器中选择我的应用程序我将类型设为null

3 个答案:

答案 0 :(得分:2)

这对我有用:

JBOSS

答案 1 :(得分:0)

尝试为清单文件添加权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

答案 2 :(得分:0)

你必须在Manifeast.xml中更改

 <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="audio/*" />
        </intent-filter>

在您的Main活动中,您必须收到oncreate()方法的意图。

Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();
    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if (type.startsWith("image/")) {
            handleSendImage(intent); // Handle single image being sent
        }
        else  if (type.startsWith("audio/")) {
            handleSendAudio(intent); // Handle single audio being sent
        }
    }

现在每当您使用send调用应用程序时。您可以看到应用的图标。当您获得意图时,您可以根据需要进行更改。

我希望这对你有所帮助。