رفتن به مطلب
  • پخش آنلاین مسابقات جهانی

پست های پیشنهاد شده

سلام

من یک برنامه نوشتم که یک فایل apk رو فراخوانی میکنه و وارد صفحه ی نصب میشه

در تمام اندروید ها به جز اندروید 7 و 8 به خوبی کار میکنه اما روی 7 و 8 فورس کلوز میده

از fileprovider برای اندروید 7 و بیشتر از 7 استفاده کردم

لطفا کمک کنید

 

 

 

package com.example.ali.filep;

import android.Manifest;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;


public class MainActivity extends Activity {
  

    final Context context = this;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mybutton = (Button)findViewById(R.id.b);
        mybutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
String path = Environment.getExternalStorageDirectory() + "/Download/" + "myapk.apk";
                InstallUpdate(path );

            }
        });
    }




    public void InstallUpdate(String path) {
        final File toInstall = new File(path);
        if (Build.VERSION.SDK_INT >= 24) {
            Uri apkUri = FileProvider.getUriForFile(context, "sheiday.ptsu.com.installer.fileprovider", toInstall);
            Intent install = new Intent(Intent.ACTION_VIEW);
            install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            install.setDataAndType(apkUri, "application/vnd.android.package-archive");
            context.startActivity(install);

        } else {
            Uri apkUri = Uri.fromFile(toInstall);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            this.startActivity(intent);


        }
    }

    public boolean isStoragePermissionGranted() {
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.v(TAG, "Permission is granted");
                return true;
            } else {

                Log.v(TAG, "Permission is revoked");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                return false;
            }
        } else { //permission is automatically granted on sdk<23 upon installation
            Log.v(TAG, "Permission is granted");
            return true;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG, "Permission: " + permissions[0] + "was " + grantResults[0]);
            //resume tasks needing this permission
        }
    }

    public void Deleteupdeate() {
        File file = new File(Environment.getExternalStorageDirectory() + "/Download/" + "yourapk.apk");
        boolean d = file.delete();
        if (file.exists()) {
            try {
                file.getCanonicalFile().delete();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (file.exists()) {
                getApplicationContext().deleteFile(file.getName());
            }
            if (!file.exists()) {
                Toast.makeText(this, "delete file downloaded", Toast.LENGTH_LONG).show();
            }
        }
    }
}

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="yournamePackge" >
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="yourpackge.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepath" />
        </provider>
    </application>

</manifest>

 

و یک فایل xml هم داره به نام filepath

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <external-path path="" name="download"/>
    </paths>
</resources>

و اینم xml اصلی

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="110dp"
        android:id="@+id/b" />
</RelativeLayout>

 

برای اندروید 7 به صورت دستی میرم تنظیمات و پرمیشن رو اجازه میدم اما بازم فورس کلوز میده

 

ممنون از راهنمایی تون

به اشتراک گذاری این ارسال


لینک به ارسال
در 15 ساعت قبل، ali666645 گفته است :

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="yourpackge.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepath" />
        </provider>

 

دستور اجرا نمیشه

ویرایش شده توسط hadi9823

به اشتراک گذاری این ارسال


لینک به ارسال
در 9 ساعت قبل، ILYA20 گفته است :

درود

فایل apk که فراخوانی میکنید مطمئن هستید روی اندروید 8 کار میکنه ؟

روی اپ دیگری تست کنید

نه روی اندروید 8  نه اندروید 7 اجرا نمیشه

به اشتراک گذاری این ارسال


لینک به ارسال
در 11 دقیقه قبل، ali666645 گفته است :

نه روی اندروید 8  نه اندروید 7 اجرا نمیشه

دوست عزیز منظورم اپلیکیشنی بود که میخواهید اون رو توسط ابزارتون هندل کنید 

خدمتتون عرض کردم اپ دیگری رو برای تست هندل کنید ببینید کار میده 

به اشتراک گذاری این ارسال


لینک به ارسال
در هم اکنون، ILYA20 گفته است :

دوست عزیز منظورم اپلیکیشنی بود که میخواهید اون رو توسط ابزارتون هندل کنید 

خدمتتون عرض کردم اپ دیگری رو برای تست هندل کنید ببینید کار میده 

درود چنتا اپ رو تست کردم جواب نداد در هر صورت پس از فشار دادن کلید فورس کلوز میده

به اشتراک گذاری این ارسال


لینک به ارسال
در 21 دقیقه قبل، hadi9823 گفته است :

این سورس force close رو ایمپورت کن داخل برنامه

https://github.com/hardik-trivedi/ForceClose

ببخشید من تازه واردم نمیدونم این سورس رو چه طوری وارد برنامه کنم؟

به اشتراک گذاری این ارسال


لینک به ارسال
در هم اکنون، ali666645 گفته است :

ببخشید من تازه واردم نمیدونم این سورس رو چه طوری وارد برنامه کنم؟

نمیشه اگه تازه کاری ک حالا حالاهااا باید ارور فیکس کنی

بیا این مطلبو بخون تا بتونی راحت ایمپورت کنی:

https://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android

به اشتراک گذاری این ارسال


لینک به ارسال
در 21 دقیقه قبل، hadi9823 گفته است :

نمیشه اگه تازه کاری ک حالا حالاهااا باید ارور فیکس کنی

بیا این مطلبو بخون تا بتونی راحت ایمپورت کنی:

https://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android

3 فایل جاوا داخل سورس github داشت که دو تا رو کپی کردم داخل پروژه ی خوددم دیگری mainActivity.java بود رو متد داخلش رو کپی کردم داخل mainactivity خودم در بالا ی قسمتی از کد که موجب ارور میشد

پس از اجرا اسکرین شات زیر رو گرفتم

Screenshot_1544266607.png

به اشتراک گذاری این ارسال


لینک به ارسال
در 4 دقیقه قبل، hadi9823 گفته است :

منظور بنده جایگزاری کد سورس بصورت important! بود

اقا شرمنده من اینجوری بلد نیست لطف میکنی پروژه رو دانلود کنی ایمپورت کنی بالا لینک دانلود پروژه رو گذاشتم

من واقعا اون مدلی که میگین ایمپورت کردن بلد نیستم چیزی هم تو اینترنت درباره ایمپورت سورس توی یک پروژه پیدا نکردم

اینم لینک دانلود پروژه ممنون https://drive.google.com/file/d/1i4N_GrPTfVYeVIdjbtHKteVvRCvV6G92/view

به اشتراک گذاری این ارسال


لینک به ارسال

Join the conversation

You can post now and register later. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • جدید...