2017-12-18 6 views
0

In meiner app Manifest Ich habe die Verwendung der Erlaubnis erklärt:Verwendung von PackageManager canRequestPackageInstallationen in Android Oreo?

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

und in meinem Code ich überprüfen, ob meine app aus unbekannten Quellen installieren:

public void reinstallApp(Activity activity, String pathname, int request_code) 
    { 
     if (activity.getPackageManager().canRequestPackageInstalls()) 
     { 
      try 
      { 
       Intent intent = new Intent(Intent.ACTION_VIEW); 
       intent.setDataAndType(Uri.fromFile(new File(pathname)), "application/vnd.android.package-archive"); 
       activity.startActivityForResult(intent, request_code); 
      } 
      catch (Exception e) 
      { 
       LogUtilities.show(this, e); 
      } 
     } 
     else 
     { 
      activity.startActivity(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).setData(Uri.parse(String.format("package:%s", activity.getPackageName())))); 
     } 
    } 

aber die „activity.getPackageManager() .canRequestPackageInstalls() "gibt immer" false "zurück, auch wenn ich in der Auswahlaktivität die Erlaubnisinstallation von unbekannten Quellen überprüfe.

Was ist das Problem?

Antwort

1

Sie müssen zuerst um Erlaubnis fragen. Dazu müssen Sie die Installationsberechtigung von unbekannten Quellen anfordern. Ich habe die Antwort bekommen, indem ich einfach deinen Code neu arrangiert habe.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 
      if (!getPackageManager().canRequestPackageInstalls()) { 
       startActivityForResult(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).setData(Uri.parse(String.format("package:%s", getPackageName()))), 1234); 
      } else { 
       callInstallProcess(); 
      } 
     } else { 
      callInstallProcess(); 
     } 

Der obige Code wird in Ihrem onCreate() sein. Sie können das Ergebnis überprüfen.

@RequiresApi(api = Build.VERSION_CODES.O) 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 1234 && resultCode == Activity.RESULT_OK) { 
     if (getPackageManager().canRequestPackageInstalls()) { 
      callInstallProcess(); 
     } 
    } else { 
     //give the error 
    } 
} 

Wo Ihre Installation in callInstallProcess() stattfindet;

 try 
     { 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.fromFile(new File(pathname)), "application/vnd.android.package-archive"); 
      activity.startActivityForResult(intent, request_code); 
     } 
     catch (Exception e) 
     { 
      LogUtilities.show(this, e); 
     } 

Vergessen Sie nicht die Erlaubnis

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> 
in AndroidManifest.xml geben
Verwandte Themen