sanukin39 / UniAndroidPermission

Android Runtime Permission for Unity
MIT License
136 stars 30 forks source link

Change current AndroidManifest to use the plugin #6

Open JOY opened 7 years ago

JOY commented 7 years ago

Hi,

When my game launch it requested read external SD, account. I need to delay it at least after the loading. In my current AndroidManifest.xml file, I have this:

<activity 
        android:label="@string/app_name" 
        android:launchMode="singleTask" 
        android:name="com.unity3d.player.UnityPlayerActivity" 
        android:screenOrientation="sensorLandscape">
        <!--<intent-filter>
            <category android:name="android.intent.category.LAUNCHER"/>
            <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
        </intent-filter>-->
        <meta-data 
        android:name="unityplayer.UnityActivity" 
        android:value="true"/>
    </activity>

So should I remove the code below and use them in your custom activity instead?

<intent-filter>
            <category android:name="android.intent.category.LAUNCHER"/>
            <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>

I tried this as well but my game stuck at loading screen forever.

sanukin39 commented 7 years ago

Hi LeGiangAnh,

First, you should not remove 'intent-filter' tag. If you want to skip request permission dialog at lunch, you should insert sentence below under 'activity' tag.

<activity 
        android:label="@string/app_name" 
        android:launchMode="singleTask" 
        android:name="com.unity3d.player.UnityPlayerActivity" 
        android:screenOrientation="sensorLandscape">
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER"/>
            <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
        </intent-filter>
        <meta-data 
        android:name="unityplayer.UnityActivity" 
        android:value="true"/>
</activity>
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />

Please give it a try.

Thanks,

JOY commented 7 years ago

Thank you. Do I need to add your custom Activity tag as well? This one:

<activity android:name=“net.sanukin.OverrideUnityActivity"
         android:label="@string/app_name"
         android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
sanukin39 commented 7 years ago

Yes, the custom activity is need to send callback to unity program!

JOY commented 7 years ago

Thank you. I will rebuild it. Just one more question: Where should I put the prefab and script? Anywhere in Assets folder?

sanukin39 commented 7 years ago

If using Unity5 or later, you can put the plugin assets anywhere in Assets folder. Otherwise, you should put androidpermission.jar under Assets/Plugins/Android folder.

JOY commented 7 years ago

Here is the result:

1) At the boot screen after I accepted needed requests, the game stuck at that screen forever. I attach the log here.

log.txt

2) It created 2 icons. I guess because of two "android.intent.category.LAUNCHER".

Could you please help me?

[Update] I was able to pass the logo screen by adding WRITE_EXTERNAL_STORAGE to List Permission. But then I stuck at our login screen. We need these permissions but I could not find them in the list:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="com.firebase.test.permission.C2D_MESSAGE"/>
<uses-permission android:name="com.android.vending.BILLING"/>
<uses-permission android:name="com.sec.android.iap.permission.BILLING"/>

Thanks.

sanukin39 commented 7 years ago

These problems are due to settings of AndroidManifest.xml. So, cloud you share complete code of the file?

JOY commented 7 years ago

Hi,

I attach 2 files:

AndroidManifest.zip

sanukin39 commented 7 years ago

It seems that there is a conflict of mainActivity.

So, I reccomend that merge each activity classes.

  1. Remove my plugin’s activity from AndroidManifest.xml.
<activity android:name="net.sanukin.OverrideUnityActivity"
        android:label="@string/app_name"
        android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
        android:screenOrientation="sensorLandscape" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
  1. Override onRequestPermissionsResult method at your activity class(com.joy.hero.MainActivity)
    @Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
            switch (requestCode) {
                case 0: {
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        UnityPlayer.UnitySendMessage("UniAndroidPermission", "OnPermit", "");
                    } else {
                        UnityPlayer.UnitySendMessage("UniAndroidPermission", "NotPermit", "");
                    }
                    break;
                }
            }
        }

※Add appropriate namespace

import android.content.pm.PackageManager;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

Please give it a try.

Thanks,

JOY commented 7 years ago

It solved the issue. Thank you so much. I'm testing whether all the permissions work correctly.

shubhamvimap commented 5 years ago

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myapp.car, PID: 27601 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.eicher.bus/net.sanukin.OverrideUnityActivity}: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.Instrumentation.newActivity(Instrumentation.java:1174) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)

Hi I am getting this error in logcat on the time of app launch. App has been installed but not being launched due to this error. Can any body Help?

laurganta commented 5 years ago

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myapp.car, PID: 27601 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.eicher.bus/net.sanukin.OverrideUnityActivity}: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.Instrumentation.newActivity(Instrumentation.java:1174) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)

Hi I am getting this error in logcat on the time of app launch. App has been installed but not being launched due to this error. Can any body Help?

Hei. Did you manage to find a fix for this? Thanks!

shubhamvimap commented 5 years ago

No. I am trying to get permissions on runtime. How is it possible? Please help.

On Tue, 5 Feb 2019, 17:58 Laurentiu Ganta <notifications@github.com wrote:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myapp.car, PID: 27601 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.eicher.bus/net.sanukin.OverrideUnityActivity}: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.Instrumentation.newActivity(Instrumentation.java:1174) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)

Hi I am getting this error in logcat on the time of app launch. App has been installed but not being launched due to this error. Can any body Help?

Hei. Did you manage to find a fix for this? Thanks!

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/sanukin39/UniAndroidPermission/issues/6#issuecomment-460620350, or mute the thread https://github.com/notifications/unsubscribe-auth/ArYKUApSNPDOvZZn2J4PUxEBJIcjE-YGks5vKXkEgaJpZM4KL9dg .

laurganta commented 5 years ago

No. I am trying to get permissions on runtime. How is it possible? Please help. On Tue, 5 Feb 2019, 17:58 Laurentiu Ganta @.*** wrote: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myapp.car, PID: 27601 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.eicher.bus/net.sanukin.OverrideUnityActivity}: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.ClassNotFoundException: Didn't find class "net.sanukin.OverrideUnityActivity" on path: DexPathList[[zip file "/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/lib/arm, /data/app/com.eicher.bus-czdQorSpiGC8vSyvrpNkmg==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.Instrumentation.newActivity(Instrumentation.java:1174) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669) Hi I am getting this error in logcat on the time of app launch. App has been installed but not being launched due to this error. Can any body Help? Hei. Did you manage to find a fix for this? Thanks! — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#6 (comment)>, or mute the thread https://github.com/notifications/unsubscribe-auth/ArYKUApSNPDOvZZn2J4PUxEBJIcjE-YGks5vKXkEgaJpZM4KL9dg .

Unity now has support for this: https://docs.unity3d.com/Manual/android-RequestingPermissions.html

Archi97 commented 4 years ago

It seems that there is a conflict of mainActivity.

So, I reccomend that merge each activity classes.

  1. Remove my plugin’s activity from AndroidManifest.xml.
<activity android:name="net.sanukin.OverrideUnityActivity"
        android:label="@string/app_name"
        android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
        android:screenOrientation="sensorLandscape" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
  1. Override onRequestPermissionsResult method at your activity class(com.joy.hero.MainActivity)
    @Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
            switch (requestCode) {
                case 0: {
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        UnityPlayer.UnitySendMessage("UniAndroidPermission", "OnPermit", "");
                    } else {
                        UnityPlayer.UnitySendMessage("UniAndroidPermission", "NotPermit", "");
                    }
                    break;
                }
            }
        }

※Add appropriate namespace

import android.content.pm.PackageManager;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

Please give it a try.

Thanks,

hi. im duing all things but build is failing. errors is code of java file. i have no idea what to do. please help