6

我是使用Robotium framework來測試應用程序的黑盒。 每次安裝新應用程序時,被測應用程序都會在狀態欄中發送通知。 我想點擊該通知,但我仍然沒有找到正確的方法來做到這一點。以編程方式點擊Android通知

當我手動點擊一個通知我得到這個logcat線:

I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.FrontActivity bnds=[0,38][240,86] (has extras) u=0} from pid -1 
I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.ResultActivity u=0} from pid 8600 
I/ActivityManager( 148): Displayed com.test.package/.activity.FrontActivity: +1s183ms 
I/ActivityManager( 148): Displayed com.test.package/.activity.ResultActivity: +744ms 

我知道Robotium不能在同一時間測試2個不同的應用程序,以及我知道你不能得到的通知外部應用程序。

我也試圖讓懸而未決的意圖,並通過使用下面的代碼火起來:

Context context = this.getInstrumentation().getTargetContext().getApplicationContext(); 
String intentClassString = "com.test.package.activity.FrontActivity"; 
Class<?> intentClass = null; 

try { 
    intentClass = Class.forName(intentClassString); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 

Intent intent = new Intent(context, intentClass); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_NO_CREATE); 

try { 
    pendingIntent.send(); 
} catch (CanceledException e) { 
    e.printStackTrace(); 
} 

活動實際上是顯示,但它是從我通過手動調用它獲得不同的。我認爲在我通過的情況下或者我稱之爲未決意圖的方式有問題。

有關此問題的任何提示?有沒有更好的方法來模擬點擊通知?

回答

1

您可以觸發通知欄上的滑動並點按通知上的事件。通過改變參數,你可以使用這些命令

adb shell input swipe 100 500 400 100 1000 

adb shell input tap 400 400 

參考命令。

0

答案Ranjith KP給你包含解決方案。請注意,您需要運行該應用程序的電話,因爲這些命令與sudo權限一起使用。

這是爲我工作的代碼。它首先擴展通知欄(刷卡命令),等待1秒,最後點擊列表上的第一個通知。根據需要修改軸參數。

Process su = null; 
try { 
su = Runtime.getRuntime().exec("su"); 
su.getOutputStream().write("input swipe 270 010 270 900\n".getBytes()); 
Thread.sleep(1000); 
su.getOutputStream().write("input tap 200 200\n".getBytes()); 
su.getOutputStream().write("exit\n".getBytes()); 
su.waitFor(); 
} catch (Exception e) { 
e.printStackTrace(); 
} finally { 
if (su != null) { 
    su.destroy(); 
} 
}