0

ファイルを共有できる他のアプリが共有メニューでファイルを選択し、アプリケーションを開いてファイルをアプリに「転送」できるようにするアプリケーションがあります。

私の問題は、彼らが共有メニューから私のアプリケーションを選択したときです(たとえば、ギャラリーでいくつかの写真を選択した後、彼らは私のアプリと共有することを選択します)ギャラリーアプリケーション内でログインアクティビティが開かれます

このプロセスが古いデバイスで機能することを試してみたところ、機能しましたが、新しいデバイスでは機能しなかったことに注意してください。

これは私のmanifest.xmlです

<application
    android:name="com.Application"
    android:allowBackup="true"
    android:fullBackupContent="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:mimeType="*/*"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustPan"/>
    <activity
        android:name=".login.LoginActivity"
        android:label="@string/app_name"
        android:launchMode="singleInstance"
        android:windowSoftInputMode="adjustResize|stateVisible">
        <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="*/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="*/*" />
        </intent-filter>
    </activity>
</application>

このアプリにはログインとメインの 2 つのアクティビティがあり、ログインが成功するとメインが読み込まれます。

さまざまな種類の launcherMode 設定を試しましたが、ギャラリーでインスタンスが作成されるのを止めるものは何もありませんでした

これは私のログインアクティビティからのものです

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_login);
    receivedIntent = getIntent();
    //set orientation
    setRequestedOrientation(isPhone() ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent != null && intent.getAction() != null && (intent.getAction().equals(Intent.ACTION_SEND) || intent.getAction().equals(Intent.ACTION_SEND_MULTIPLE))){
        finish();
        startActivity(intent);
    }
}

問題は、古いデバイスでは onNewIntent メソッドが期待どおりに呼び出されることですが、新しいデバイスでは launcherMode を無視して新しいインスタンスを作成し、onCreate() を実行するだけです。

共有メニューから呼び出されたときにアプリケーションを「強制的に」起動させる方法についてのアイデアはありますか?

現在テスト中のデバイス - Samsung モバイル Android 8.0、API 26 - 動作しない Samsung タブレット Android 7.1.1、API 25 - 期待どおりに動作する

4

2 に答える 2