Splashscreen和意图

时间:2017-04-19 13:42:48

标签: java android android-intent splash-screen

我正在开发这个Android应用程序,它从库中接收数据(在我的例子中是一个图像)并显示它。我还要做的是为我的应用创建SplashScreen。但是当我这样做时,我的意图变得无效。

  

清单代码:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xkbc1923.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

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

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

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

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

  

闪屏

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class SplashScreen extends Activity {
private static final int DISPLAY_DURATION = 1000;
@Override
protected final void onCreate(final Bundle savedInstState) {
    super.onCreate(savedInstState);
    setContentView(R.layout.activity_splashscreen);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(SplashScreen.this, AlertExampleActivity.class);
            startActivity(i);
            // close this activity
            finish();
        }
    }, DISPLAY_DURATION);
}
}
  

MainActivity

import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import static android.provider.CalendarContract.CalendarCache.URI;
public class AlertExampleActivity extends AppCompatActivity {
ImageView picView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    ///get the image view
    //get the text view
    setContentView(R.layout.activity_alert_example);

    picView = (ImageView) findViewById(R.id.picture);
    TextView txtView = (TextView) findViewById(R.id.txt);

    if (txtView ==null) {
        Log.w("Example", "TextView is null");
    }

    //get the received intent
    Intent receivedIntent = getIntent();
    //get the action
    String receivedAction = receivedIntent.getAction();
    //find out what we are dealing with
    String receivedType = receivedIntent.getType();
    //make sure it's an action and type we can handle
    if (receivedAction.equals(Intent.ACTION_SEND)) {
        Log.d("Example", "Send received");
        //content is being shared
        if (receivedType.startsWith("text/")) {
            Log.d("Example", "Text received");

            //handle sent text
            //hide the other ui item
            picView.setVisibility(View.GONE);
            //get the received text
            String receivedText = receivedIntent.getStringExtra(Intent.EXTRA_TEXT);
            //check we have a string
            if (receivedText != null) {
                //set the text
               txtView.setText(receivedText);
            }
        } else if (receivedType.startsWith("image/")) {
            Log.d("Example", "Image received");
            //handle sent image
            handleSendImage(receivedIntent);
        }

    } else if (receivedAction.equals(Intent.ACTION_MAIN)) {
        //app has been launched directly, not from share list
        Log.d("Example", "Direct launch of App");
    }
}

private void handleSendImage(Intent intent) {
    // Get the image URI from intent
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    // When image URI is not null
    if (imageUri != null) {
        // Update UI to reflect image being shared
        picView.setImageURI(imageUri);
    } else{
        Toast.makeText(this, "Error occured, URI is invalid", Toast.LENGTH_LONG).show();
    }
}
}

3 个答案:

答案 0 :(得分:0)

我不确定这会解决你的问题,但你可以试试。

而不是:

Intent i = new Intent(SplashScreen.this, AlertExampleActivity.class);
            startActivity(i);
            // close this activity
            finish();

试试这个:

startActivity(new Intent(SplashScreen.this, AlertExampleActivity.class));
finish();

答案 1 :(得分:0)

您没有为意图添加任何额外数据。所以它通常是null。只需在Intent上向SplashScreen.java(i)添加必要的数据即可。前 -

i.setAction("action"); 
i.setType("type");
i.putExtra("key", "value");

答案 2 :(得分:0)

我已经更改了清单文件,因为我希望即使在外部调用时也会出现启动画面。

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

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".AlertExampleActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>



    </activity>

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

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

    </activity>

</application>

并更改了SplashscreenActivity:

 public class SplashScreen extends Activity {

private static final int DISPLAY_DURATION = 1000;

@Override
protected final void onCreate(final Bundle savedInstState) {
    super.onCreate(savedInstState);
    setContentView(R.layout.activity_splashscreen);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(SplashScreen.this, AlertExampleActivity.class);

            i.setAction(Intent.ACTION_SEND);
            i.setType("*/*");
            String[] mimetypes = {"image/*", "video/*"};
            i.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
            startActivity(i);

            // close this activity
            finish();
        }
    }, DISPLAY_DURATION);
}
}

我还没有改变MainActivity中的任何内容,但现在我不再收到图片......我是Android的新手,所以我真的很感激这个解释。