2017-08-13 12 views
-2

アンインストーラアプリケーションを作成しようとしていますが、これまでのところ問題はありません。アンインストール後にアプリケーションのリストを更新したいのですが、である私が思い付いた:オブジェクトをインテントからonActivityResult()メソッドに渡す方法

private void uninstallApps(List<Apps> apps) { 
for (AppModel app : apps) { 
    Uri uri = Uri.fromParts("package", app.getPackageName(), null); 
    Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, uri); 
    startActivityForResult(intent, 1); 
    } 
} 

が続い

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

} 

がどのように私はonActivityResultにuninstallApps()から "アプリ" の変数を渡すことができますか()?

+0

私はあなたの質問 – Salman500

答えて

0

、あなたは `onActivityResultにandroid.intent.extra.INSTALL_RESULTを取得しますが、我々はまた、このような状況では気にしなければなりませんユーザがアプリケーションをアンインストールしなかった場合、インテントでnull値が返されるため、毎回インテントデータのnullをチェックする必要があります。

intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); 

あなたが任意のアプリのアンインストールに基づいてリストを更新したい場合は、最高の場所は、あなたの放送では、このフィルタを追加する場合は、ブロードキャストを取得する放送受信機

<action android:name="android.intent.action.PACKAGE_REMOVED" /> 

あり、あなたがアンインストールAppsのパッケージの詳細を得ることができます。

@Override 
public void onReceive(Context context, Intent intent) { 

    String packageName = intent.getData().getEncodedSchemeSpecificPart(); 

    Log.d("", "onReceive: " + intent.getAction()); 
    Log.d("", "onReceive: " + packageName); 

    // If the action is android.intent.action.PACKAGE_REMOVED then app is uninsatalled 
    if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) { 

     // Here you send one local broadcast to your activity or fragment and you can update in your view. 

    } 
} 
0

「app」変数をuninstallApps()からonActivityResult()に渡すにはどうすればよいですか?

はあなたがstartActivityForResult()を呼び出し、onActivityResult()コールバックを期待しているところはどこでもあなたの活動やその断片クラス、上のフィールドに格納します。私たちは、以下のようなあなたのセットIntent.EXTRA_RETURN_RESULT場合、あなたの目的で余分にIntent.ACTION_UNINSTALL_PACKAGEstartActivityForResult

ながら、パッケージの詳細を取得することはありません

+0

を理解していなかった私はそれを試してみましたが、問題は、すべての意図が最初に実行されるすべてのコレスポンデントonActivityResult()メソッド、私はフィールドにアプリを保存するので、すべての時間、それは上書きされますforループの次回の反復では、次のようになります。 –

+0

@ToniJoe: "すべてのインテントが最初に実行される" - 前のアクティビティが完了した後でのみ、次の 'ACTION_UNINSTALL_PACKAGE'アクティビティを開始するようにコードを変更します。 – CommonsWare

+0

それは問題です、forループは最初にインテントを実行します。私は一日中苦労しています。 –

関連する問題