Packages
mob_new
0.3.13
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.45
0.1.44
0.1.43
0.1.42
0.1.40
0.1.33
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Project generator for the Mob mobile framework
Current section
Files
Jump to
Current section
Files
priv/templates/mob.new/android/app/src/main/AndroidManifest.xml.eex
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="<%= bundle_id %>">
<!-- Network -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Camera + microphone -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<!-- USB host (Mob.Peripheral.VendorUsb). required=false so the Play Store
doesn't filter the app off devices without USB host support; apps
degrade via Mob.Peripheral.capabilities/0. No uses-permission needed —
per-device access is gated by the runtime ACTION_USB_PERMISSION dialog. -->
<uses-feature android:name="android.hardware.usb.host" android:required="false" />
<!-- Location -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Media library (Android 13+) -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!-- Legacy media read for Android 12 and below -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<!-- Notifications (Android 13+) -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- AlarmManager for scheduled local notifications -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"
android:minSdkVersion="31" />
<!-- Bluetooth Classic (Mob.Bt — HFP/SPP/HID for headsets, peripherals) -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation"
android:minSdkVersion="31" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"
android:minSdkVersion="31" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"
android:minSdkVersion="31" />
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
<!-- Haptic feedback -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Background keep-alive (Mob.Background) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"
android:minSdkVersion="34" />
<!-- Package visibility (API 30+): apps we want to launch via Mob.Device.open_url. -->
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="mailto" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
</queries>
<application
android:label="<%= display_name %>"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:extractNativeLibs="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">
<!-- Main activity -->
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustResize"
android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden|navigation|uiMode|fontScale|density">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Full-screen QR / barcode scanner.
Theme override is required: MobScannerActivity extends
AppCompatActivity (CameraX + ML Kit need it), and that
throws IllegalStateException at setContentView when the
activity's theme isn't AppCompat-derived. AppTheme is
Theme.NoTitleBar to keep the main Compose surface clean,
so the scanner activity declares its own AppCompat theme. -->
<activity android:name=".MobScannerActivity"
android:exported="false"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<!-- Scheduled local notification delivery -->
<receiver android:name=".NotificationReceiver"
android:exported="false" />
<!-- Background keep-alive foreground service (Mob.Background) -->
<service android:name=".BeamForegroundService"
android:exported="false"
android:foregroundServiceType="dataSync" />
<!-- FCM token refresh (remote push notifications) -->
<service android:name=".MobFirebaseService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<!-- FileProvider for camera temp files (photo / video capture) -->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_paths" />
</provider>
</application>
</manifest>