前言
我在Unity3D調用Android功能與組件(十)—BroadcastReceiver中介紹了如何使用Unity接入廣播。
然而很多沒有做過Android的小伙伴卻表示

那我也只能

其實,廣播作為Android四大組件之一,其妙用之處太多太多。你可以用來做應用自啟動,也可用來做智能網絡檢測、電量優化大師、定位器等等。
秉着讓大家少走一步彎路的原則,我還是在這里單獨發一篇帖子與大家分享。感興趣的小伙伴還是建議多看看Unity3D調用Android功能與組件(十)—BroadcastReceiver這篇,因為有更高的自由度任你發揮。
正文:
1.首先申請相應權限
在AndroidMenifest.xml中添加下列權限,可根據自己需要酌情增減
<
uses-permission
android:name
=
"android.permission.RECEIVE_BOOT_COMPLETED"
/>
<
uses-permission
android:name
=
"android.permission.ACCESS_WIFI_STATE"
/>
<
uses-permission
android:name
=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<
uses-permission
android:name
=
"android.permission.READ_PHONE_STATE"
/>
<
uses-permission
android:name
=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<
uses-permission
android:name
=
"android.permission.BIND_ACCESSIBILITY_SERVICE"
/>
<
uses-permission
android:name
=
"android.permission.BIND_SCREENING_SERVICE"
/>
<
uses-permission
android:name
=
"android.permission.RECEIVE_USER_PRESENT"
/>
|
溫馨提示:請妥善使用權限,堅決不申請用不到的權限
2.添加廣播接收
<
receiver
android:name
=
".SelfWakeBroadcastReceiver"
android:process
=
":remote"
>
<
intent-filter
android:priority
=
"90000"
>
<
action
android:name
=
"android.intent.action.BOOT_COMPLETED"
/>
<
action
android:name
=
"android.net.conn.CONNECTIVITY_CHANGE"
/>
<
action
android:name
=
"android.intent.action.PHONE_STATE"
/>
<
action
android:name
=
"android.intent.action.DATE_CHANGED"
/>
<
action
android:name
=
"android.intent.action.ACTION_POWER_CONNECTED"
/>
<
action
android:name
=
"android.intent.action.SCREEN_OFF"
/>
<
action
android:name
=
"android.intent.action.SCREEN_ON"
/>
<
category
android:name
=
"android.intent.category.HOME"
/>
<
action
android:name
=
"android.intent.action.USER_PRESENT"
/>
</
intent-filter
>
</
receiver
>
|
在AndroidMenifest.xml中把上面的代碼加到Application標簽里面。
3.Java源碼及打包
package
com.unity3d.player;
import
java.util.List;
import
android.content.BroadcastReceiver;
import
android.content.ComponentName;
import
android.content.Context;
import
android.content.Intent;
import
android.content.IntentFilter;
import
android.content.pm.ApplicationInfo;
import
android.content.pm.PackageInfo;
import
android.content.pm.PackageManager;
import
android.content.pm.PackageManager.NameNotFoundException;
import
android.content.pm.ResolveInfo;
import
android.util.Log;
/**
* Created by User on 2016/11/19.
*/
public
class
SelfWakeBroadcastReceiver
extends
BroadcastReceiver {
@Override
public
void
onReceive(Context context, Intent intent) {
Log.v(
"SelfWakeBroadcast"
,
"has Receive a broadcast"
);
RunApp(context,
"com.hhu.virtualhair"
);
//TODO 換成自己的包名
}
public
void
registerScreenActionReceiver(Context mContext) {
IntentFilter filter =
new
IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(SelfWakeBroadcastReceiver.
this
, filter);
}
private
void
RunApp(Context context,String packageName) {
PackageInfo pi;
try
{
pi = context.getPackageManager().getPackageInfo(packageName,
0
);
Intent resolveIntent =
new
Intent(Intent.ACTION_MAIN,
null
);
resolveIntent.setPackage(pi.packageName);
PackageManager pManager = context.getPackageManager();
List<ResolveInfo> apps = pManager.queryIntentActivities(
resolveIntent,
0
);
ResolveInfo ri = apps.iterator().next();
if
(ri !=
null
) {
String className = ri.activityInfo.name;
Intent intent =
new
Intent(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn =
new
ComponentName(ri.activityInfo.packageName, className);
intent.setComponent(cn);
context.startActivity(intent);
}
}
catch
(NameNotFoundException e) {
e.printStackTrace();
}
}
}
|
把上述Java代碼中的//TODO 換成自己的包名處的報名替換為自己應用的報名;
將上述代碼打包成.jar;
把打包好的jar文件放到Unity的/Assets/Plugins/Android/文件夾下。
4.大功告成!
發布你的軟件或游戲,享受自啟的快感!
--------------------------------2018.09.06--更新----------------------
本帖子內容實際上是2016年的一個回答,由於時間比較久遠,隨着Android系統的升級,可能某些小伙伴使用本帖子提供的教程會出問題,MemoryC也沒來得及去測試與更正。
最近交流群里三位小伙伴一起探討了一個方案,我把他們得出的教程粘在這里,有需要的碼友可參考下。
Unity3D調用Android功能與組件(10.1):應用自啟動
http://www.manew.com/thread-139699-1-1.html
(出處: -【游戲蠻牛】-游戲出海,ar增強現實,虛擬現實,unity3d,unity3d教程下載首選u3d,unity3d官網)