Der Code denn ich dir gegeben habe geht bei mir auch unter Android 10.
Ich hoffe du hast auch die pemission gesetzt.
[CODE lang="java" title="Meine Permissionen"] <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.vendig.Billing" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
<permission
android:name="android.permission.REQUEST_SUPERUSER"
android
rotectionLevel="signature" />
<permission
android:name="android.permission.REPORT_SUPERUSER"
android
rotectionLevel="signature" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />[/CODE]
Und Mein aktuelles Fragment...
[CODE lang="java" title="Mein Fragment"]package ;
import android.Manifest;
import android.app.Activity;
import android.app.DownloadManager;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Objects;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.app.Activity.RESULT_CANCELED;
import static android.app.Activity.RESULT_FIRST_USER;
import static android.app.Activity.RESULT_OK;
public class App_Fragment extends Fragment {
private static final int PERMISSION_REQUEST_CODE = 200;
int INSTALL_REQUEST_CODE = 1;
int UNINSTALL_REQUEST_CODE = 2;
Button install_btn, deinstall_btn, oeffnen_btn;
ImageView like, dislike;
TextView NieInstallText;
String app_name = "";
Integer euro = 0;
Integer cent = 00;
String apk_url = "";
String packageName = "";
String beschreibungstext;
Integer wurdeschonmalinstalliert = 0;
Integer bewertung = 0;
Integer qc_geprueft = 0;
String app_version = "1.0";
Integer vgeprueft = 0;
String berechtigungen[];
String entwickler_name;
String entwickler_email;
String entwickler_webseite;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View fragmentlayout_app_fragment = inflater.inflate(R.layout.activity_app__fragment, null);
install_btn = (Button)fragmentlayout_app_fragment.findViewById(R.id.install_button);
deinstall_btn = (Button)fragmentlayout_app_fragment.findViewById(R.id.deinstall_button);
oeffnen_btn = (Button)fragmentlayout_app_fragment.findViewById(R.id.oeffnen_button);
NieInstallText = (TextView)fragmentlayout_app_fragment.findViewById(R.id.text_nieInstalliert);
like = (ImageView)fragmentlayout_app_fragment.findViewById(R.id.image_like);
dislike = (ImageView)fragmentlayout_app_fragment.findViewById(R.id.image_dislike);
SharedPreferences prefsbewertung = getActivity().getSharedPreferences("Bewertung", getActivity().MODE_PRIVATE);
bewertung = prefsbewertung.getInt("bewertung", bewertung);
SharedPreferences prefswurdemalinstall = getActivity().getSharedPreferences(packageName, getActivity().MODE_PRIVATE);
wurdeschonmalinstalliert = prefswurdemalinstall.getInt("wurdeschonmalinstalliert", wurdeschonmalinstalliert);
Bewertungfreigeben();
Bewertung();
like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bewertung = 1;
SharedPreferences prefs = getActivity().getSharedPreferences("Bewertung", getActivity().MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("bewertung" , bewertung);
editor.apply();
// Toast.makeText(getActivity(), "Bewertung ist: " + bewertung, Toast.LENGTH_SHORT).show();
Bewertung();
}
});
dislike.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bewertung = 2;
SharedPreferences prefs = getActivity().getSharedPreferences("Bewertung", getActivity().MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("bewertung" , bewertung);
editor.apply();
// Toast.makeText(getActivity(), "Bewertung ist: " + bewertung, Toast.LENGTH_SHORT).show();
Bewertung();
}
});
/*
AppDatenImport();
*/
IsAppInstall();
return fragmentlayout_app_fragment;
}
private void Bewertungfreigeben() {
switch (wurdeschonmalinstalliert){
case 0:
NieInstallText.setVisibility(View.VISIBLE);
like.setVisibility(View.INVISIBLE);
dislike.setVisibility(View.INVISIBLE);
break;
case 1:
NieInstallText.setVisibility(View.INVISIBLE);
like.setVisibility(View.VISIBLE);
dislike.setVisibility(View.VISIBLE);
break;
}
}
private void Bewertung() {
switch (bewertung){
case 0:
like.setImageResource(R.drawable.ic_like);
dislike.setImageResource(R.drawable.ic_dislike);
break;
case 1:
like.setImageResource(R.drawable.ic_like_on);
dislike.setImageResource(R.drawable.ic_dislike);
break;
case 2:
like.setImageResource(R.drawable.ic_like);
dislike.setImageResource(R.drawable.ic_dislike_on);
break;
}
}
private boolean IsAppInstall() {
PackageManager pm = getActivity().getPackageManager();
try {
PackageInfo info = pm.getPackageInfo("", PackageManager.GET_META_DATA);
install_btn.setVisibility(View.INVISIBLE);
deinstall_btn.setVisibility(View.VISIBLE);
oeffnen_btn.setVisibility(View.VISIBLE);
wurdeschonmalinstalliert = 1;
SharedPreferences prefs = getActivity().getSharedPreferences(packageName, getActivity().MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("wurdeschonmalinstalliert" , wurdeschonmalinstalliert);
editor.apply();
DeleteApk();
deinstall_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
i.setData(Uri.parse("package:" + packageName));
i.putExtra(Intent.EXTRA_RETURN_RESULT, true);
startActivityForResult(i, UNINSTALL_REQUEST_CODE);
}
});
oeffnen_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = getActivity().getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(i);
}
});
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
install_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkPermission()){
UpdateApp atualizaApp = new UpdateApp();
atualizaApp.setContext(getActivity());
atualizaApp.execute(apk_url);
}else{
requestPermission();
}
}
});
return false;
}
return true;
}
/*
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == UNINSTALL_REQUEST_CODE){
if (resultCode == RESULT_OK){
IsAppInstall();
Toast.makeText(getActivity(), "Erfolgreich deinstalliert!", Toast.LENGTH_SHORT).show();
}else if (resultCode == RESULT_CANCELED){
Toast.makeText(getActivity(), "Deinstallation abgebrochen", Toast.LENGTH_SHORT).show();
}else if (resultCode == RESULT_FIRST_USER){
Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT).show();
Toast.makeText(getActivity(), "Deinstallation fehlgeschllagen!", Toast.LENGTH_SHORT).show();
}
}
}
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE){
if (grantResults.length > 0){
boolean locationAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean cameraAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (locationAccepted && cameraAccepted){
UpdateApp updateApp = new UpdateApp();
updateApp.setContext(getActivity());
updateApp.execute(apk_url);
}
}
}
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private boolean checkPermission(){
int result = ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), WRITE_EXTERNAL_STORAGE);
int result1 = ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), READ_EXTERNAL_STORAGE);
return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private void requestPermission(){
ActivityCompat.requestPermissions(getActivity(), new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
}
public class UpdateApp extends AsyncTask<String, Integer, String>{
private ProgressDialog mPDialog;
private Context mContext;
void setContext(Activity context){
mContext = context;
context.runOnUiThread(new Runnable() {
@Override
public void run() {
mPDialog = new ProgressDialog(mContext);
mPDialog.setMessage("Bitte warten...");
mPDialog.setIndeterminate(true);
mPDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mPDialog.setCancelable(false);
mPDialog.show();
}
});
}
@Override
protected String doInBackground(String... arg0) {
try {
URL url = new URL(arg0[0]);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
int lenghtOfFile = c.getContentLength();
/*
String PATH = Objects.requireNonNull(mContext.getExternalFilesDir(null)).getAbsolutePath();
*/
String PATH = Objects.requireNonNull(mContext.getFilesDir().getAbsolutePath());
File file = new File(PATH);
boolean isCreate = file.mkdir();
File outputFile = new File(file, ".....apk");
if (outputFile.exists()){
boolean isDelete = outputFile.delete();
}
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1;
long total = 0;
while ((len1 = is.read(buffer)) != -1){
total += len1;
fos.write(buffer, 0, len1);
publishProgress((int) ((total * 100) / lenghtOfFile));
}
fos.close();
is.close();
if (mPDialog != null)
mPDialog.dismiss();
installApk();
}catch (Exception e){
Log.e("UpdateAPP", "Update error! " + e.getMessage());
}
return null;
}
@Override
protected void onPreExecute(){
super.onPreExecute();
if (mPDialog != null)
mPDialog.show();
}
@Override
protected void onProgressUpdate(Integer... values){
super.onProgressUpdate(values);
if (mPDialog != null){
mPDialog.setIndeterminate(false);
mPDialog.setMax(100);
mPDialog.setProgress(values[0]);
}
}
@Override
protected void onPostExecute(String result){
if (mPDialog != null){
mPDialog.dismiss();
}
if (result != null)
Toast.makeText(mContext, "Download error: " + result, Toast.LENGTH_SHORT).show();
else
Toast.makeText(mContext, "App Downloaded", Toast.LENGTH_SHORT).show();
}
private void installApk(){
try {
/*
String PATH = Objects.requireNonNull(mContext.getExternalFilesDir(null)).getAbsolutePath();
*/
String PATH = Objects.requireNonNull(mContext.getFilesDir().getAbsolutePath());
File file = new File(PATH + "/.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= 24){
Uri downloaded_apk = FileProvider.getUriForFile(mContext, mContext.getApplicationContext().getPackageName() + ".provider", file);
intent.setDataAndType(downloaded_apk, "application/vnd.android.package-archive");
List<ResolveInfo> resolveInfoList = mContext.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resolveInfoList){
mContext.grantUriPermission(mContext.getApplicationContext().getPackageName() + ".provider", downloaded_apk, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, 1);
}else{
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivityForResult(intent, INSTALL_REQUEST_CODE);
}catch (Exception e){
e.printStackTrace();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
/*
if (requestCode == INSTALL_REQUEST_CODE){
if (resultCode == RESULT_OK){
Toast.makeText(getActivity(), "Erfolgreich installiert!", Toast.LENGTH_SHORT).show();
// Wird nie als Installiert angezeigt!
}else if (resultCode == RESULT_CANCELED){
Toast.makeText(getActivity(), "installation abgebrochen", Toast.LENGTH_SHORT).show();
}else if (resultCode == RESULT_FIRST_USER){
Toast.makeText(getActivity(), "installation fehlgeschlagen!", Toast.LENGTH_SHORT).show();
}
}
*/
if (requestCode == UNINSTALL_REQUEST_CODE){
if (resultCode == RESULT_OK){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
getActivity().getFragmentManager().beginTransaction().detach(this).commitNow();
getActivity().getFragmentManager().beginTransaction().attach(this).commitNow();
}else{
getActivity().getFragmentManager().beginTransaction().detach(this).attach(this).commit();
}
/*
getActivity().finish();
startActivity(getActivity().getIntent());
*/
DeleteApk();
// Toast.makeText(getActivity(), "Erfolgreich deinstalliert!", Toast.LENGTH_SHORT).show();
}else if (resultCode == RESULT_CANCELED){
Toast.makeText(getActivity(), "Deinstallation abgebrochen", Toast.LENGTH_SHORT).show();
}else if (resultCode == RESULT_FIRST_USER){
Toast.makeText(getActivity(), "Deinstallation fehlgeschlagen!", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onStart() {
DeleteApk();
super.onStart();
}
@Override
public void onResume() {
IsAppInstall();
Bewertungfreigeben();
super.onResume();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
public void DeleteApk(){
/*
String PATH = Objects.requireNonNull(getActivity().getExternalFilesDir(null)).getAbsolutePath();
*/
String PATH = Objects.requireNonNull(getActivity().getFilesDir().getAbsolutePath());
File file = new File(PATH);
boolean isCreate = file.mkdir();
File outputFile = new File(file, "..apk");
if (outputFile.exists()){
boolean isDelete = outputFile.delete();
}
}
}[/CODE]
Aber das Löschen (DeleteApk()
geht ja nicht unter onStop, onPause,...
Haube das nur jetzt unter onStart, sowie bei der Install Prüfung.
Da muss ich irgendwie ein Back Service starten, sobald die App gedownloadet ist und wird beendet, wenn Sie installiert oder abgebrochen ist....